diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..07f8c27 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,28 @@ +name: ci +on: + pull_request: +concurrency: + group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # 6.0.1 + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # 4.0.1 + with: + install_args: 'node' + - run: corepack enable + - run: yarn install + - run: yarn gen:fumadocs + - run: yarn lint + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # 6.0.1 + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # 4.0.1 + with: + install_args: 'node' + - run: corepack enable + - run: yarn install + - run: yarn format --check diff --git a/.gitignore b/.gitignore index 6c15cc0..d04ce2b 100644 --- a/.gitignore +++ b/.gitignore @@ -20,5 +20,8 @@ node_modules .source/ dist/ .wrangler/ - +.dev.vars .idea + +# macOS +.DS_Store diff --git a/.yarnrc.yml b/.yarnrc.yml index 0783596..d353d9c 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -1,2 +1,5 @@ nodeLinker: node-modules + +npmMinimalAgeGate: 0 + preferReuse: true diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e99621f --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2024-2026 Seokju Na + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/content/docs/cli.mdx b/content/docs/cli.mdx new file mode 100644 index 0000000..6bc85fb --- /dev/null +++ b/content/docs/cli.mdx @@ -0,0 +1,184 @@ +--- +title: CLI reference +description: The wvb command-line tool — pack, serve, upload, deploy, download, and the local remote. +--- + +The `wvb` command-line tool (package `@wvb/cli`, also installed as `webview-bundle`) packs bundles +and drives the remote update workflow. Install it as a dev dependency: + +```sh +npm install -D @wvb/cli +npx wvb --help +``` + +Most commands read defaults from a [`wvb.config.ts`](/docs/configuration) found in the working +directory. Pass `--config ` to use a specific file and `--cwd ` to change the working +directory. + +## Authoring bundles + +### `wvb pack [SRC_DIR]` + +Pack a directory of web assets into a `.wvb` archive. + +```sh +wvb pack ./dist +wvb pack ./dist --outfile ./app.wvb +wvb pack ./dist --ignore '*.map' --ignore 'node_modules/**' +wvb pack ./dist --header '*.html' 'cache-control' 'max-age=3600' +``` + +| Option | Description | +| --------------- | ------------------------------------------------------------------------------------- | +| `SRC_DIR` | Source directory (or `pack.srcDir` in config). | +| `--outfile, -O` | Output file name. Defaults to the `package.json` name; `.wvb` is appended if missing. | +| `--outdir` | Output directory. Defaults to `.wvb`. | +| `--ignore` | Glob(s) of files to exclude (repeatable). | +| `--header, -H` | Set headers for matching files: `--header ` (repeatable). | +| `--write` | Set `--no-write` to simulate without writing. | +| `--overwrite` | Overwrite an existing output file. Default `true`. | + +### `wvb extract [FILE]` + +Extract a `.wvb` archive's files back onto disk. + +```sh +wvb extract ./app.wvb --outdir ./unpacked +``` + +| Option | Description | +| -------------- | ------------------------------------------------ | +| `FILE` | Bundle file to extract. | +| `--outdir, -O` | Destination directory. | +| `--clean` | Remove the out directory first. Default `false`. | +| `--write` | Set `--no-write` to simulate. | + +### `wvb serve [FILE]` + +Serve a single bundle's files over HTTP — useful for previewing a packed bundle in a browser. + +```sh +wvb serve ./app.wvb # http://localhost:4312 +wvb serve ./app.wvb --port 8080 --hostname 0.0.0.0 +``` + +| Option | Description | +| ---------------- | ---------------------------------------------------- | +| `FILE` | Bundle to serve (or `serve.file` in config). | +| `--hostname, -H` | Bind hostname. Default `localhost`. (`HOSTNAME` env) | +| `--port, -P` | Port. Default `4312`. (`PORT` env) | +| `--silent` | Disable request logging. | + +## Publishing & updating + +These commands require `remote.*` settings in your [config](/docs/configuration). See +[Remote updates](/docs/remote-updates) for the full workflow and a local-testing walkthrough. + +### `wvb upload [BUNDLE] [VERSION]` + +Upload a packed bundle to the remote, optionally computing integrity, signing it, and deploying. + +```sh +wvb upload # uses config defaults +wvb upload app 1.2.0 --deploy +wvb upload app 1.2.0 --deploy --channel beta +wvb upload --file ./dist/app.wvb --force +``` + +| Option | Description | +| ------------------- | ------------------------------------------------------------ | +| `BUNDLE`, `VERSION` | Bundle name and version (else from config / `package.json`). | +| `--file, -F` | Path to the `.wvb` to upload. | +| `--force` | Overwrite if the version already exists. | +| `--deploy` | Deploy after upload. Default `true`. | +| `--channel` | Channel to deploy to (with `--deploy`). | +| `--skip-integrity` | Don't compute an integrity hash. | +| `--skip-signature` | Don't sign the bundle. | + +### `wvb deploy [BUNDLE] VERSION` + +Deploy a previously uploaded version (make it the current version clients receive). + +```sh +wvb deploy app 1.2.0 +wvb deploy app 1.2.0 --channel beta +``` + +### `wvb download [BUNDLE] [VERSION]` + +Download a bundle from the remote and (by default) save it to disk. + +```sh +wvb download app --endpoint https://updates.example.com +wvb download app 1.2.0 --out ./bundles/app.wvb --overwrite +wvb download app --skip-write # fetch + print info only +``` + +| Option | Description | +| ---------------- | -------------------------------------------- | +| `--out, -O` | Output path. Defaults to `.wvb`. | +| `--endpoint, -E` | Remote endpoint (else `remote.endpoint`). | +| `--channel` | Channel to download from. | +| `--write` | Set `--no-write` to skip saving. | +| `--overwrite` | Overwrite an existing file. Default `false`. | +| `--progress` | Show a progress bar. Default `true`. | + +### `wvb builtin` + +Download the currently deployed bundles from the remote into a local directory, to ship as +[builtin](/docs/concepts#sources-builtin-vs-remote) fallbacks with your app. + +```sh +wvb builtin --endpoint https://updates.example.com --out .wvb/builtin/bundles +wvb builtin --include 'app*' --exclude 'internal*' +``` + +| Option | Description | +| ------------------------- | ------------------------------------------------- | +| `--out, -O` | Output directory. Default `.wvb/builtin/bundles`. | +| `--endpoint, -E` | Remote endpoint. | +| `--channel` | Channel to pull from. | +| `--include` / `--exclude` | Glob filters over remote bundles (repeatable). | +| `--clean` | Clear the output directory first. Default `true`. | +| `--concurrency` | Parallel downloads. | + +## Inspecting & testing the remote + +### `wvb remote list` + +List bundles deployed on the remote. + +```sh +wvb remote list --endpoint https://updates.example.com +wvb remote list --channel beta +``` + +### `wvb remote current [BUNDLE]` + +Show the current deployed version and metadata for a bundle. + +```sh +wvb remote current app --endpoint https://updates.example.com +``` + +### `wvb remote local` + +Start a local update server backed by a directory (default `~/.wvb/local`). It implements the same +[HTTP contract](/docs/remote-updates#the-remote-http-contract) as a production server, so you can test +the full update loop offline. + +```sh +wvb remote local # http://localhost:4313, serving ~/.wvb/local +wvb remote local --base-dir ./.wvb/local --port 4313 --allow-other-versions +``` + +| Option | Description | +| ------------------------ | -------------------------------------------------------- | +| `--base-dir` | Directory to serve. Default `~/.wvb/local`. | +| `--allow-other-versions` | Allow downloading non-current versions. Default `false`. | +| `--hostname, -H` | Bind hostname. Default `localhost`. (`HOSTNAME` env) | +| `--port, -P` | Port. Default `4313`. (`PORT` env) | +| `--silent` | Disable request logging. | + +See [Remote updates → Testing locally](/docs/remote-updates#testing-locally) for how to wire this up +with `@wvb/remote-local`. diff --git a/content/docs/concepts.mdx b/content/docs/concepts.mdx new file mode 100644 index 0000000..fedffb8 --- /dev/null +++ b/content/docs/concepts.mdx @@ -0,0 +1,122 @@ +--- +title: Concepts +description: The .wvb format, bundle sources, the manifest, channels, integrity, and signatures. +--- + +This page defines the vocabulary used throughout the guides. If a term in a platform guide is +unclear, it's probably explained here. + +## The `.wvb` archive + +A Webview Bundle is a single file with three parts laid out back to back: + +| Header (17 bytes) | Index (variable) | Data (variable) | +| -------------------------------------------------- | -------------------------------- | ---------------------------- | +| magic number, format version, index size, checksum | path → offset/length/headers map | LZ4-compressed file contents | + +- **Header** — starts with the magic number `0xF09F8C90F09F8E81` (the UTF-8 bytes for 🌐🎁), then a + one-byte format version, a `u32` index size, and a checksum. +- **Index** — a map from each file path (e.g. `/index.html`) to where its bytes live in the data + section, plus its content type and any HTTP headers to replay when served. +- **Data** — each file's bytes compressed with [LZ4](https://github.com/lz4/lz4), each block + followed by an [xxHash-32](https://github.com/Cyan4973/xxHash) checksum. + +Every section is checksummed, so a truncated or corrupted archive is detected before its contents +are trusted. The full byte-level specification is in the +[`wvb` crate docs](https://docs.rs/wvb). + +By convention a packed file is named `_.wvb`, e.g. `app_1.0.0.wvb`. + +## Bundles and bundle names + +A **bundle** is one logical web app, identified by a **bundle name** (e.g. `app`). A bundle has +many **versions** (`1.0.0`, `1.1.0`, …), each a separate `.wvb` file. At any moment one version is +the **current** version that gets served. + +## Sources: `builtin` vs `remote` + +A **source** is a directory on the device that stores bundles, plus a `manifest.json` that tracks +versions. Apps typically use two sources: + +- **`builtin`** — bundles shipped _inside_ the app package. Read-only, and used as the fallback the + very first time the app runs (before anything has been downloaded). +- **`remote`** — bundles downloaded from your update server. **Remote wins**: when a bundle exists + in both, the remote version is served. + +```text +{source_dir}/ +├── app/ +│ ├── app_1.0.0.wvb +│ └── app_1.1.0.wvb +└── manifest.json +``` + +This split is what makes updates safe: you always have the shipped `builtin` version to fall back +to, and downloaded `remote` versions transparently shadow it once verified and installed. + +## The manifest + +`manifest.json` lives at the root of a source directory and records, for each bundle, the versions +present and which one is current: + +```json +{ + "manifestVersion": 1, + "entries": { + "app": { + "versions": { + "1.0.0": {}, + "1.1.0": { "integrity": "sha384:…", "signature": "…", "etag": "…" } + }, + "currentVersion": "1.1.0" + } + } +} +``` + +The per-version metadata (`integrity`, `signature`, `etag`, `lastModified`) is filled in from the +remote server's response headers when a bundle is downloaded. + +## Channels + +A **channel** lets you deploy different versions to different audiences from the same server — +`stable`, `beta`, `canary`, `internal`, and so on. Clients ask for a channel when listing, +downloading, or checking for updates; if they don't specify one, they get the default channel. +Channels are how you do staged rollouts and pre-release testing. + +## Integrity + +**Integrity** is a hash over the _serialized bytes_ of a bundle, so a client can confirm it +downloaded exactly what the server published. Webview Bundle uses SHA-3, serialized as +`:` — for example `sha384:Ws2q…`. Supported algorithms are `sha256`, `sha384`, +and `sha512`. + +When updating, an **integrity policy** controls how strict verification is: + +- **Strict** — a hash must be present and must match, or the update fails. +- **Optional** (default) — verify when a hash is present; allow the download when it isn't. +- **None** — skip integrity verification. + +## Signatures + +A **signature** proves _who_ published a bundle, not just that it is intact. The publisher signs +the bundle's integrity string with a private key; clients verify it with the matching public key. +Supported algorithms: **ECDSA** (secp256r1 / secp384r1), **Ed25519**, and **RSA** (PKCS#1 v1.5 / +PSS). Keys are supplied as PEM/DER. Signature verification is layered on top of integrity: if you +configure a verifier, downloads must carry a valid signature. + +## The update lifecycle + +Putting it together, shipping an update looks like this: + +1. **Pack** your build output into a `.wvb` (`wvb pack`). +2. **Upload** it to your remote server, optionally computing integrity and a signature + (`wvb upload`). +3. **Deploy** that version to a channel so clients can see it (`wvb deploy`, or `wvb upload +--deploy`). +4. On the device, the **updater** checks for a newer deployed version, downloads it, verifies + integrity/signature, and installs it into the `remote` source — after which it's served instead + of the builtin version. + +See [Remote updates & local testing](/docs/remote-updates) for the full walkthrough, including +how to run the whole loop on your own machine. diff --git a/content/docs/configuration.mdx b/content/docs/configuration.mdx new file mode 100644 index 0000000..7f23677 --- /dev/null +++ b/content/docs/configuration.mdx @@ -0,0 +1,174 @@ +--- +title: Configuration reference +description: The wvb.config file — pack, remote, serve, and builtin options. +--- + +The `wvb` CLI reads a config file (`wvb.config.ts`, `.js`, `.mjs`, …) from the working directory. +Author it with `defineConfig` from `@wvb/config` for full type-checking: + +```ts +import { defineConfig } from '@wvb/config'; + +export default defineConfig({ + root: process.cwd(), + pack: { + /* … */ + }, + remote: { + /* … */ + }, + serve: { + /* … */ + }, + builtin: { + /* … */ + }, +}); +``` + +`defineConfig` also accepts an async function or a promise, so you can compute config at runtime +(e.g. read a version, load a signing key): + +```ts +export default defineConfig(async () => ({ + remote: { endpoint: process.env.WVB_ENDPOINT! /* … */ }, +})); +``` + +## Top-level + +| Field | Type | Description | +| --------- | --------------- | ---------------------------------------------------------- | +| `root` | `string` | Project root for resolving paths. Default `process.cwd()`. | +| `pack` | `PackConfig` | Defaults for `wvb pack`. | +| `remote` | `RemoteConfig` | Remote server, uploader/deployer, integrity/signature. | +| `serve` | `ServeConfig` | Defaults for `wvb serve`. | +| `builtin` | `BuiltinConfig` | Defaults for `wvb builtin`. | + +## `pack` + +```ts +pack: { + srcDir: './dist', + outFile: 'app', // → app.wvb + outDir: '.wvb', + ignore: ['*.map'], + headers: { '*.html': { 'cache-control': 'max-age=3600' } }, + overwrite: true, +} +``` + +| Field | Type | Description | +| ----------- | ------------------------------------------------------------------------------- | ---------------------------------------------- | +| `srcDir` | `string` | Directory to pack. | +| `outFile` | `string` | Output file name (`.wvb` appended if missing). | +| `outDir` | `string` | Output directory. Default `.wvb`. | +| `ignore` | `Array \| ((file) => boolean)` | Patterns/predicate to exclude files. | +| `headers` | `Record \| [glob, HeadersInit][] \| ((file) => HeadersInit)` | HTTP headers to attach to matching files. | +| `overwrite` | `boolean` | Overwrite an existing output. Default `true`. | + +## `remote` + +```ts +import { localRemote } from '@wvb/remote-local'; +const provider = localRemote({}); + +remote: { + endpoint: 'https://updates.example.com', + bundleName: 'app', // or () => string | Promise + version: () => pkg.version, // or a string; defaults to package.json version + uploader: provider.uploader, + deployer: provider.deployer, + integrity: { algorithm: 'sha384' }, + signature: { /* see below */ }, +} +``` + +| Field | Type | Description | +| ------------ | --------------------------- | --------------------------------------------------- | +| `endpoint` | `string` | Base URL of the remote server. | +| `bundleName` | `string \| (() => …)` | Bundle name for remote operations. | +| `version` | `string \| (() => …)` | Version to publish. | +| `uploader` | `BaseRemoteUploader` | Uploads the `.wvb` to the server (from a provider). | +| `deployer` | `BaseRemoteDeployer` | Marks a version deployed (from a provider). | +| `integrity` | `boolean \| { algorithm }` | Compute an integrity hash on upload. | +| `signature` | `SignatureSignConfig \| fn` | Sign the bundle on upload. | + +`uploader`/`deployer` come from a provider package — `@wvb/remote-local`, `@wvb/remote-aws`, or +`@wvb/remote-cloudflare`. Each exposes `{ uploader, deployer }` compatible with these fields. + +### `integrity` + +Either `true`/`{ algorithm }` for the built-in hashing, or a function for custom logic. + +```ts +integrity: { + algorithm: 'sha384'; +} // 'sha256' | 'sha384' | 'sha512' +integrity: async ({ data }) => `sha384:${await myHash(data)}`; +``` + +### `signature` + +Sign the integrity string with a private key. The algorithm determines the required fields: + +```ts +// ECDSA +signature: { + algorithm: 'ecdsa', + curve: 'p256', // 'p256' | 'p384' + hash: 'sha256', // 'sha256' | 'sha384' | 'sha512' + key: { format: 'pkcs8', data: privateKeyDerBuffer }, +} + +// Ed25519 +signature: { + algorithm: 'ed25519', + key: { format: 'pkcs8', data: privateKeyDerBuffer }, +} + +// RSA +signature: { + algorithm: 'rsa-pss', // or 'rsa-pkcs1-v1.5' + hash: 'sha256', + saltLength: 32, // rsa-pss only + key: { format: 'pkcs8', data: privateKeyDerBuffer }, +} + +// or fully custom +signature: async ({ message }) => myExternalSigner(message), +``` + +Key `format` is one of `'raw' | 'pkcs8' | 'spki' | 'jwk'` (use `data: JsonWebKey` for `'jwk'`, +`data: Buffer` otherwise). Clients verify with the matching public key — see +[Remote updates → Integrity and signatures](/docs/remote-updates#integrity-and-signatures). + +## `serve` + +```ts +serve: { file: './app.wvb', port: 4312, silent: false } +``` + +| Field | Type | Description | +| -------- | --------- | ------------------------ | +| `file` | `string` | Bundle to serve. | +| `port` | `number` | Port. Default `4312`. | +| `silent` | `boolean` | Disable request logging. | + +## `builtin` + +```ts +builtin: { + outDir: '.wvb/builtin/bundles', + include: ['app*'], + exclude: ['internal*'], + clean: true, +} +``` + +| Field | Type | Description | +| ---------------------- | ----------------------------------------------------- | -------------------------------------------------------------------------- | +| `outDir` | `string` | Where to write downloaded builtin bundles. Default `.wvb/builtin/bundles`. | +| `include` / `exclude` | `string \| RegExp \| Array<…> \| ((info) => boolean)` | Match remote bundles by name/version. | +| `clean` | `boolean` | Clear `outDir` before downloading. Default `true`. | +| `download.concurrency` | `number` | Parallel downloads. | diff --git a/content/docs/guides/android.mdx b/content/docs/guides/android.mdx new file mode 100644 index 0000000..49a8dfe --- /dev/null +++ b/content/docs/guides/android.mdx @@ -0,0 +1,181 @@ +--- +title: Android +description: Serve an Android WebView from a .wvb bundle using the Kotlin bindings generated from the Rust core. +--- + +On Android, Webview Bundle ships as a Kotlin library generated from the Rust core with +[UniFFI](https://mozilla.github.io/uniffi-rs/). You build a [`BundleSource`](/docs/concepts#sources-builtin-vs-remote) +from on-device directories and serve files into a `WebView` through a `BundleUrlHandler`. + +A working test app lives in +[`packages/ffi/android`](https://github.com/webview-bundle/webview-bundle/tree/main/packages/ffi/android), and the integration tests in +[`TestRunner.kt`](https://github.com/webview-bundle/webview-bundle/blob/main/packages/ffi/android/testapp/src/main/kotlin/dev/wvb/testapp/TestRunner.kt) +exercise the full Kotlin API. + + + The Android bindings are built from this repository (no Maven artifact is published yet). The + steps below build the `lib-android` module and include it in your app. + + +## What the library contains + +The Android library (`dev.wvb`, module `lib-android`) bundles: + +- the generated Kotlin bindings (`dev/wvb/wvb_ffi.kt`), +- the native `libwvb_ffi.so` for each ABI (`arm64-v8a`, `armeabi-v7a`, `x86`, `x86_64`) under + `jniLibs/`, +- runtime dependencies on [JNA](https://github.com/java-native-access/jna) and + `kotlinx-coroutines`. + +Minimum SDK is 24; the module targets Java 17. + +## 1. Build and include the library + +From the repo, build the Android bindings (this compiles the Rust core for each Android ABI and +generates the Kotlin bindings + `jniLibs`): + +```sh +# from packages/ffi +yarn build-ffi-android # → node ./cli/main.ts build android --profile=release +``` + +Then include `lib-android` in your app. In a Gradle multi-module setup that vendors the library: + +```kotlin +// settings.gradle.kts +include(":lib-android") +project(":lib-android").projectDir = file("path/to/webview-bundle/packages/ffi/android/lib-android") + +// app/build.gradle.kts +dependencies { + implementation(project(":lib-android")) + implementation("net.java.dev.jna:jna:5.x@aar") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.x") +} +``` + +Make sure your packaging keeps the native symbols: + +```kotlin +android { + packaging { + jniLibs { keepDebugSymbols.add("**/*.so") } + } +} +``` + +## 2. Ship your bundles as assets + +Pack your web build and place the `.wvb` plus its `manifest.json` under `src/main/assets`, following +the [source layout](/docs/concepts#sources-builtin-vs-remote): + +```sh +npx wvb pack ./dist --outfile app/src/main/assets/bundles/builtin/app/app_1.0.0.wvb +``` + +```text +assets/bundles/builtin/ +├── app/ +│ └── app_1.0.0.wvb +└── manifest.json +``` + +Assets aren't a real filesystem path, so at startup copy the builtin bundles into a directory the +native code can read (e.g. under `context.filesDir`). The test app's `setupFixtures()` shows this +copy-from-assets pattern. + +## 3. Build a `BundleSource` + +```kotlin +import dev.wvb.* + +val source = BundleSource( + BundleSourceConfig( + builtinDir = File(context.filesDir, "bundles/builtin").absolutePath, + remoteDir = File(context.filesDir, "bundles/remote").absolutePath, + builtinManifestFilepath = null, // defaults to manifest.json in the dir + remoteManifestFilepath = null, + ) +) + +// Query what's available: +val version = source.loadVersion("app") // current version (remote wins over builtin) +val bundle = source.fetch("app") // load a bundle into memory +val html = bundle.getData("/index.html") // ByteArray? — file bytes, or null +``` + +## 4. Serve a `WebView` from the bundle + +Create a `BundleUrlHandler` over the source and call it from a `WebViewClient`'s +`shouldInterceptRequest`, mapping the handler's `HttpResponse` to a `WebResourceResponse`: + +```kotlin +import android.webkit.* +import dev.wvb.* +import kotlinx.coroutines.runBlocking + +class BundleWebViewClient(source: BundleSource) : WebViewClient() { + private val handler = BundleUrlHandler(source) + + override fun shouldInterceptRequest( + view: WebView, + request: WebResourceRequest, + ): WebResourceResponse? { + if (request.url.scheme != "https" || request.url.host?.endsWith(".wvb") != true) { + return null // not ours; let the WebView handle it + } + val method = if (request.method.equals("HEAD", true)) HttpMethod.HEAD else HttpMethod.GET + val resp = runBlocking { + handler.handle(method, request.url.toString(), request.requestHeaders) + } + val contentType = resp.headers["content-type"] ?: "application/octet-stream" + return WebResourceResponse( + contentType.substringBefore(';'), + "utf-8", + resp.status.toInt(), + "OK", + resp.headers, + resp.body.inputStream(), + ) + } +} + +// Wire it up and navigate to your bundle: +webView.webViewClient = BundleWebViewClient(source) +webView.loadUrl("https://app.wvb/index.html") // bundle "app", file "/index.html" +``` + +The handler resolves the bundle name from the first host label (`app.wvb` → bundle `app`) and treats +a trailing slash or extension-less path as `index.html`. It returns `404` for unknown paths and +supports `GET`/`HEAD`. `BundleUrlHandler.handle(...)` is a suspending call, so run it from a +coroutine (or `runBlocking` inside `shouldInterceptRequest`, which already runs off the main thread). + +### Development against a dev server + +For hot reload during development, use `LocalUrlHandler` instead, mapping a host to your dev server: + +```kotlin +val local = LocalUrlHandler(mapOf("app" to "http://10.0.2.2:5173")) +// 10.0.2.2 is the host machine from the Android emulator +``` + +## 5. Build a bundle on device (optional) + +The same API can create bundles in-process — useful for tests or tooling: + +```kotlin +val builder = BundleBuilder(Version.V1) +builder.insertEntry("/index.html", "".toByteArray(), "text/html", null) +val bundle = builder.build(null) + +val bytes = writeBundleToBytes(bundle) // serialize to ByteArray +val loaded = readBundleFromBytes(bytes) // round-trip +writeBundle(bundle, file.absolutePath) // or write to a file (suspending) +``` + +## Over-the-air updates + +`BundleSource` exposes `writeRemoteBundle(...)` and `updateVersion(...)` to install a downloaded +bundle and flip the current version. The download/verify orchestration mirrors the desktop +[updater](/docs/remote-updates); on Android you typically fetch the bundle bytes yourself (or via a +future binding) and call `writeRemoteBundle` to install them, then reload the `WebView`. diff --git a/content/docs/guides/electron.mdx b/content/docs/guides/electron.mdx new file mode 100644 index 0000000..2901511 --- /dev/null +++ b/content/docs/guides/electron.mdx @@ -0,0 +1,191 @@ +--- +title: Electron +description: Serve your Electron UI from a .wvb bundle through a custom protocol, with dev-server proxying and over-the-air updates. +--- + +This guide wires Webview Bundle into an Electron app: serving your UI from a `.wvb` bundle through +a custom protocol, switching to a live dev server during development, and (optionally) updating +bundles over the air. + +A complete, runnable example lives in +[`examples/electron-forge-vite`](https://github.com/webview-bundle/webview-bundle/tree/main/examples/electron-forge-vite). + +## Install + +```sh +npm install @wvb/electron +# and the CLI, to pack bundles (dev dependency): +npm install -D @wvb/cli +``` + +`@wvb/electron` depends on `@wvb/node`, the native N-API binding, which ships prebuilt binaries for +common platforms. No Rust toolchain is required to consume it. + +## 1. Register the protocol in the main process + +Call `wvb(...)` (an alias of `webviewBundle(...)`) **before** your windows load. It registers your +custom schemes as privileged and wires up the protocol handlers. + +```ts +// src/main.ts +import path from 'node:path'; +import { app, BrowserWindow } from 'electron'; +import { bundleProtocol, localProtocol, wvb } from '@wvb/electron'; + +wvb({ + // Where bundles live on disk (see "Bundle source" below). Defaults are usually fine. + source: { + builtinDir: path.join(process.resourcesPath, 'bundles'), + }, + protocols: [ + // In development, proxy `app-local://simple.wvb/...` to the Vite dev server so you get + // hot reload. `MAIN_WINDOW_VITE_DEV_SERVER_URL` is provided by Electron Forge's Vite plugin. + localProtocol('app-local', { + hosts: { + 'simple.wvb': MAIN_WINDOW_VITE_DEV_SERVER_URL, + }, + }), + // In production, serve `app:///...` straight from the bundle. + bundleProtocol('app', { + onError: e => console.error(e), + }), + ], +}); + +async function createWindow() { + const win = new BrowserWindow({ + width: 800, + height: 600, + webPreferences: { + preload: path.join(__dirname, 'preload.js'), + contextIsolation: true, + nodeIntegration: false, + }, + }); + // `app://.wvb/` — the first host label is the bundle name. + await win.loadURL('app://simple.wvb'); +} + +app.on('ready', createWindow); +``` + +- **`bundleProtocol(scheme)`** serves files directly out of bundles in the source. A URL like + `app://simple.wvb/index.html` resolves to bundle `simple` (the first host label), file + `/index.html`. A trailing slash or an extension-less path resolves to `index.html`. +- **`localProtocol(scheme, { hosts })`** proxies matching hosts to a localhost dev server instead. + Use it during development so you keep the same scheme while getting your bundler's hot reload. + +A common pattern is to register both and choose which URL to load based on `app.isPackaged`. + +## 2. Add the preload script + +The preload bridges a small, safe API into the renderer (used for source/remote/updater calls). + +```ts +// src/preload.ts +import { preload } from '@wvb/electron/preload'; + +preload(); +``` + +Point your `BrowserWindow`'s `webPreferences.preload` at the compiled preload (as above), and keep +`contextIsolation: true`. + +## 3. Call the API from the renderer (optional) + +If you want the UI to drive updates (e.g. a "Check for updates" button), import the renderer API. +It forwards to the main process over IPC, so it only works when the preload script is loaded. + +```ts +// src/renderer.ts +import { remote, source, updater } from '@wvb/electron/renderer'; + +// What's installed locally right now? +const version = await source.loadVersion('app'); + +// Is a newer version deployed? +const info = await updater.getUpdate('app'); +if (info.isAvailable) { + await updater.downloadUpdate('app'); // downloads, verifies, installs + // reload the window to pick up the new bundle +} +``` + +The same `source`, `remote`, and `updater` objects are also reachable in the main process from the +instance returned by `wvb(...)`: + +```ts +const instance = wvb({ + /* … */ +}); +instance.source; // BundleSource +instance.remote; // Remote | null +instance.updater; // Updater | null +await instance.whenProtocolRegistered(); +``` + +## 4. Configure over-the-air updates (optional) + +Add an `updater` block pointing at your remote server. See +[Remote updates](/docs/remote-updates) for how to stand one up (including a local one for testing). + +```ts +wvb({ + source: { builtinDir: path.join(process.resourcesPath, 'bundles') }, + updater: { + remote: { endpoint: 'https://updates.example.com' }, + // integrity / signature verification options also live here + }, + protocols: [bundleProtocol('app')], +}); +``` + +## 5. Pack and ship bundles + +Build your web app, then pack the output into a bundle and place it in the `bundles` directory you +configured as `builtinDir`: + +```sh +# build your renderer first (e.g. `vite build`), then: +npx wvb pack ./dist --outfile bundles/app/app_1.0.0.wvb +``` + +When packaging the app, make sure the `bundles` directory is included as an extra resource and that +the native `@wvb/node` binary is unpacked from the ASAR archive. With **Electron Forge + Vite**: + +```ts +// forge.config.ts +const config: ForgeConfig = { + packagerConfig: { + asar: true, + extraResource: ['bundles'], // ship the builtin bundles + }, + plugins: [ + // …vite plugin… + new AutoUnpackNativesPlugin({}), // unpack @wvb/node's .node binary from the ASAR + ], +}; +``` + + + The Forge Vite plugin ignores files outside `.vite/` by default, which can exclude `node_modules`. + The example's `forge.config.ts` shows a `packagerConfig.ignore` override that keeps `node_modules` + and `.tgz` files so the native module is bundled. See + [`examples/electron-forge-vite/forge.config.ts`](https://github.com/webview-bundle/webview-bundle/blob/main/examples/electron-forge-vite/forge.config.ts). + + +## Where bundles live + +`source` accepts `builtinDir` (shipped, read-only) and `remoteDir` (downloaded updates). A good +default is to ship `builtinDir` under `process.resourcesPath` and let `remoteDir` default to a +writable app-data location. Downloaded versions always take priority over builtin ones, so an +installed update is served automatically after `updater.downloadUpdate(...)`. + +## Troubleshooting + +- **Blank window / `ERR_FAILED`** — confirm `wvb(...)` runs before `loadURL`, and that the bundle + name in the URL matches the packed file (`app://simple.wvb` → bundle `simple`). +- **`Cannot access to webview bundle api`** in the renderer — the preload script isn't loaded; + check `webPreferences.preload` and that it calls `preload()`. +- **Works in dev, fails when packaged** — the `bundles` resource or the native `@wvb/node` binary + wasn't included; verify `extraResource` and `AutoUnpackNativesPlugin` (see above). diff --git a/content/docs/guides/ios.mdx b/content/docs/guides/ios.mdx new file mode 100644 index 0000000..9219fac --- /dev/null +++ b/content/docs/guides/ios.mdx @@ -0,0 +1,175 @@ +--- +title: iOS +description: Serve a WKWebView (iOS and macOS) from a .wvb bundle using the Swift bindings generated from the Rust core. +--- + +On iOS (and macOS), Webview Bundle ships as a Swift library generated from the Rust core with +[UniFFI](https://mozilla.github.io/uniffi-rs/). You build a [`BundleSource`](/docs/concepts#sources-builtin-vs-remote) +and serve files into a `WKWebView` through a `BundleUrlHandler` wired to a `WKURLSchemeHandler`. + +A working test app lives in +[`packages/ffi/apple`](https://github.com/webview-bundle/webview-bundle/tree/main/packages/ffi/apple), and the +integration tests in +[`TestRunner.swift`](https://github.com/webview-bundle/webview-bundle/blob/main/packages/ffi/apple/ios/TestApp/TestRunner.swift) exercise the full Swift +API. + + + The Apple bindings are built from this repository (no published release artifact yet). The steps + below build the `xcframework` and add the local Swift package. + + +## What the library contains + +- **`WebViewBundleFFI.xcframework`** — the native static libraries for `ios-arm64`, + `ios-arm64_x86_64-simulator`, and `macos-arm64_x86_64`, plus C headers. +- **`WebViewBundleLibrary`** — the generated Swift API (`WebViewBundleLibrary.swift`) that wraps it. + +The Swift package (`packages/ffi/apple/Package.swift`) ties them together and links +`SystemConfiguration`, `Security`, and `CoreFoundation`. Minimum targets are iOS 14 / macOS 12. + +## 1. Build and add the package + +From the repo, build the Apple bindings (this compiles the Rust core for each Apple platform and +generates the Swift bindings + xcframework): + +```sh +# from packages/ffi +yarn build-ffi-apple # → node ./cli/main.ts build apple --profile=release +``` + +Then add `packages/ffi/apple` as a local Swift package dependency in Xcode (File → Add Package +Dependencies → Add Local…) and link the **WebViewBundleLibrary** product to your app target. In a +`Package.swift`-based project: + +```swift +.package(path: "path/to/webview-bundle/packages/ffi/apple") +// …then add "WebViewBundleLibrary" to your target's dependencies. +``` + +## 2. Ship your bundles as resources + +Pack your web build and add the `.wvb` plus its `manifest.json` to your app bundle as resources, +following the [source layout](/docs/concepts#sources-builtin-vs-remote): + +```sh +npx wvb pack ./dist --outfile assets/bundles/builtin/app/app_1.0.0.wvb +``` + +```text +assets/bundles/builtin/ +├── app/ +│ └── app_1.0.0.wvb +└── manifest.json +``` + +At runtime, resolve the builtin directory from the app bundle, and use a writable directory (e.g. +under `Application Support` or a temp dir) for downloaded updates: + +```swift +let builtinDir = Bundle.main.resourceURL! + .appendingPathComponent("assets/bundles/builtin") +let remoteDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0] + .appendingPathComponent("bundles/remote") +try? FileManager.default.createDirectory(at: remoteDir, withIntermediateDirectories: true) +``` + +## 3. Build a `BundleSource` + +```swift +import WebViewBundleLibrary + +let source = BundleSource(config: BundleSourceConfig( + builtinDir: builtinDir.path, + remoteDir: remoteDir.path, + builtinManifestFilepath: nil, // defaults to manifest.json in the dir + remoteManifestFilepath: nil +)) + +// Query what's available: +let bundle = try await source.fetch(bundleName: "app") // load into memory +let html = try bundle.getData(path: "/index.html") // Data? — bytes or nil +``` + +## 4. Serve a `WKWebView` from the bundle + +`WKWebView` lets you handle a **custom URL scheme** with a `WKURLSchemeHandler`. Register a scheme +(it cannot be a built-in one like `https`), then forward each request to a `BundleUrlHandler`: + +```swift +import WebKit +import WebViewBundleLibrary + +final class BundleSchemeHandler: NSObject, WKURLSchemeHandler { + private let handler: BundleUrlHandler + init(source: BundleSource) { self.handler = BundleUrlHandler(source: source) } + + func webView(_ webView: WKWebView, start task: WKURLSchemeTask) { + let request = task.request + let method: HttpMethod = (request.httpMethod == "HEAD") ? .head : .get + let headers = request.allHTTPHeaderFields + Task { + do { + let resp = try await handler.handle( + method: method, + uri: request.url!.absoluteString, + headers: headers + ) + let contentType = resp.headers["content-type"] ?? "application/octet-stream" + let response = HTTPURLResponse( + url: request.url!, + statusCode: Int(resp.status), + httpVersion: "HTTP/1.1", + headerFields: resp.headers + )! + task.didReceive(response) + task.didReceive(resp.body) + task.didFinish() + } catch { + task.didFailWithError(error) + } + } + } + + func webView(_ webView: WKWebView, stop task: WKURLSchemeTask) {} +} + +// Register the scheme and load your bundle: +let config = WKWebViewConfiguration() +config.setURLSchemeHandler(BundleSchemeHandler(source: source), forURLScheme: "app") +let webView = WKWebView(frame: .zero, configuration: config) +webView.load(URLRequest(url: URL(string: "app://app.wvb/index.html")!)) +``` + +The handler resolves the bundle name from the first host label (`app.wvb` → bundle `app`) and treats +a trailing slash or extension-less path as `index.html`. It returns `404` for unknown paths and +supports `GET`/`HEAD`. `handle(...)` is `async`, so call it from a `Task`. + +### Development against a dev server + +For hot reload during development, use `LocalUrlHandler` instead, mapping a host to your dev server: + +```swift +let local = LocalUrlHandler(hosts: ["app.wvb": "http://localhost:5173"]) +``` + +## 5. Build a bundle in-process (optional) + +The same API can create bundles, which is handy for tests or tooling: + +```swift +let builder = BundleBuilder(version: .v1) +_ = try builder.insertEntry(path: "/index.html", data: Data("".utf8), + contentType: "text/html", headers: nil) +let bundle = try builder.build(options: nil) + +let bytes = try writeBundleToBytes(bundle: bundle) // serialize to Data +let loaded = try readBundleFromBytes(data: bytes) // round-trip +_ = try await writeBundle(bundle: bundle, filepath: path) // or write to a file +``` + +## Over-the-air updates + +`BundleSource` exposes `writeRemoteBundle(...)` and `updateVersion(...)` to install a downloaded +bundle and flip the current version. The download/verify orchestration mirrors the desktop +[updater](/docs/remote-updates); on iOS you typically fetch the bundle bytes yourself and call +`writeRemoteBundle` to install them, then reload the `WKWebView`. diff --git a/content/docs/guides/meta.json b/content/docs/guides/meta.json new file mode 100644 index 0000000..149258d --- /dev/null +++ b/content/docs/guides/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Platform guides", + "pages": ["electron", "tauri", "android", "ios"] +} diff --git a/content/docs/guides/tauri.mdx b/content/docs/guides/tauri.mdx new file mode 100644 index 0000000..6d417a4 --- /dev/null +++ b/content/docs/guides/tauri.mdx @@ -0,0 +1,144 @@ +--- +title: Tauri +description: Add the wvb-tauri plugin to a Tauri v2 app so the webview is served from a .wvb bundle, with dev proxying and OTA updates. +--- + +This guide adds the `wvb-tauri` plugin to a Tauri v2 app so your webview is served from a `.wvb` +bundle, with an optional localhost proxy for development and over-the-air updates. + +A complete, runnable example lives in +[`examples/tauri-simple`](https://github.com/webview-bundle/webview-bundle/tree/main/examples/tauri-simple). + +## Install + +Add the plugin crate to your `src-tauri/Cargo.toml`: + +```toml +[dependencies] +wvb-tauri = "0.1" +tauri = { version = "2", features = [] } +``` + +If you'll drive updates from the frontend, also add the JavaScript glue you normally use with Tauri +commands (`@tauri-apps/api`). The plugin registers its commands automatically. + +## 1. Register the plugin + +In your `src-tauri/src/lib.rs`, register the plugin with a `Config` that declares a bundle +**source**, the **protocols** to serve, and optionally a **remote** for updates: + +```rust +use tauri::Manager; +use wvb_tauri::{Config, Protocol, Source}; + +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .plugin(wvb_tauri::init( + Config::new() + // Where bundles live. `builtin_dir` is resolved through Tauri's path API, + // so you can point it at a resource directory… + .source(Source::new().builtin_dir_fn(|app| { + Ok(app.path().resource_dir()?.join("bundles")) + })) + // Serve `bundle:///...` straight from bundles. + .protocol(Protocol::bundle("bundle")) + // In development, proxy `local://example.com/...` to the dev server. + .protocol(Protocol::local("local").host("example.com", "http://localhost:1420")), + )) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} +``` + +- **`Protocol::bundle(scheme)`** serves files directly from bundles. `bundle://app/index.html` + resolves to bundle `app`, file `/index.html`. +- **`Protocol::local(scheme).host(host, url)`** proxies a host to a localhost dev server, so the + same scheme works with your bundler's hot reload during development. +- **`Source`** accepts `builtin_dir` / `remote_dir` (static path strings) or `builtin_dir_fn` / + `remote_dir_fn` (closures that compute the path from the `AppHandle` at runtime). When unset, both + default to the `bundles` directory in the app's resources. + +## 2. Allow the custom scheme to load + +Point your app window at the custom scheme. The simplest approach is to set the dev/prod URL in +`tauri.conf.json` or load it explicitly. For a bundle-served app you'll typically navigate the main +window to `bundle://app/` (production) or your dev server (development). + +Make sure your capabilities allow the plugin's commands if you call them from the frontend. Add the +`wvb` permissions to `src-tauri/capabilities/default.json` as needed (the plugin namespace is +`wvb`). + +## 3. Pack and ship bundles + +Build your frontend, pack it, and place the result in the directory you configured as the source: + +```sh +# build your frontend first (e.g. `vite build`), then: +npx wvb pack ./dist --outfile src-tauri/bundles/app/app_1.0.0.wvb +``` + +Include the `bundles` directory in your app resources so it ships with the build (see +`tauri.conf.json` → `bundle.resources`). + +## 4. Drive updates from the frontend (optional) + +Add a remote to the config: + +```rust +use wvb_tauri::{Config, Protocol, Remote, Source}; + +Config::new() + .source(Source::new().builtin_dir_fn(|app| Ok(app.path().resource_dir()?.join("bundles")))) + .protocol(Protocol::bundle("bundle")) + .remote(Remote::new("https://updates.example.com")); +``` + +The plugin then exposes these commands to the frontend via `invoke` (all under the `wvb` plugin +namespace): + +| Command | Arguments | Returns | +| ------------------------------------- | ------------------------ | ------------------------- | +| `plugin:wvb\|updater_get_update` | `bundleName` | update availability info | +| `plugin:wvb\|updater_download_update` | `bundleName`, `version?` | installed bundle metadata | +| `plugin:wvb\|source_load_version` | `bundleName` | active local version | +| `plugin:wvb\|source_list_bundles` | — | local bundles | +| `plugin:wvb\|remote_get_info` | `bundleName`, `channel?` | current remote metadata | + +```ts +import { invoke } from '@tauri-apps/api/core'; + +const update = await invoke('plugin:wvb|updater_get_update', { bundleName: 'app' }); +if (update.isAvailable) { + await invoke('plugin:wvb|updater_download_update', { bundleName: 'app' }); + // reload the webview to pick up the new bundle +} +``` + +The full command set (source / remote / updater) is documented on the +[`wvb-tauri` crate docs](https://docs.rs/wvb-tauri) and in +[`packages/tauri/src/commands.rs`](https://github.com/webview-bundle/webview-bundle/blob/main/packages/tauri/src/commands.rs). + +## Reaching the plugin from Rust + +From any `App`, `AppHandle`, or `Window`, the `WebviewBundleExtra` trait adds `webview_bundle()` +(aliased `wvb()`), which exposes the managed `source`, `remote`, and `updater`: + +```rust +use wvb_tauri::WebviewBundleExtra; + +let wvb = app.wvb(); +let bundles = wvb.source().list_bundles().await?; +if let Some(updater) = wvb.updater() { + updater.download_update("app", None).await?; +} +``` + +## Troubleshooting + +- **`protocol not found: `** — a request arrived for a scheme you didn't register; add the + matching `Protocol::bundle(...)` / `Protocol::local(...)`. +- **`remote is not initialized` / `updater is not initialized`** — you called a remote/updater + command without configuring `.remote(...)` on the `Config`. +- **Bundle not found at runtime** — confirm the `bundles` directory is listed in + `tauri.conf.json` resources and that `Source` resolves to it. diff --git a/content/docs/index.mdx b/content/docs/index.mdx index 9a41d6e..69a6714 100644 --- a/content/docs/index.mdx +++ b/content/docs/index.mdx @@ -1,5 +1,103 @@ --- -title: Hello World +title: Introduction +description: An offline-first web resource delivery system for webview-mounted frameworks and platforms. --- -I love Fumadocs +Webview Bundle (`wvb`) is an **offline-first web resource delivery system** for webview-mounted +frameworks and platforms. It packs your built web assets (HTML/JS/CSS/media) into a single +compressed, integrity-checked archive (`.wvb`) that your app ships with and serves to its webview +through a custom URL scheme — and can update over the air without an app-store release. + +```text + build output .wvb archive your app's webview +┌──────────────┐ pack ┌───────────────┐ serve ┌────────────────────┐ +│ dist/ │ ─────▶ │ app_1.0.0.wvb │ ──────▶ │ app://app/index.html│ +│ index.html │ │ (compressed, │ │ (offline, instant) │ +│ app.js … │ │ verified) │ └────────────────────┘ +└──────────────┘ └───────────────┘ + │ upload + deploy ▲ download + verify + ▼ │ + ┌───────────────┐ updater │ + │ remote server │ ──────────────┘ + └───────────────┘ +``` + +## Why Webview Bundle? + +- **Offline-first.** Resources are bundled locally, so the first paint never waits on the network. +- **Over-the-air updates.** Ship a fix or feature by deploying a new bundle version — no native + release required. +- **Integrity & authenticity.** Every bundle carries checksums, and downloads can be verified with + SHA-3 integrity hashes and digital signatures (ECDSA, Ed25519, RSA). +- **One format, every platform.** The same `.wvb` archive works in Electron, Tauri, Android, and + iOS via a shared Rust core. + +## Start here + + + + + + + + +Then pick your platform guide: + + + + + + + + +## Packages + +| Package | What it is | Where it runs | +| ---------------------------- | --------------------------------------------------------------------------------- | ---------------------- | +| [`wvb`](https://docs.rs/wvb) | Rust core: bundle format, source, remote, updater, protocol, integrity, signature | everywhere (library) | +| `@wvb/cli` (`wvb`) | Command-line tool: pack, serve, upload, deploy, download, local remote | your machine / CI | +| `@wvb/config` | `defineConfig` for `wvb.config.ts` | build tooling | +| `@wvb/node` | N-API bindings to the core | Node.js | +| `@wvb/electron` | Electron integration (protocols, IPC, updater) | Electron main/renderer | +| `wvb-tauri` | Tauri plugin (protocols, commands, updater) | Tauri app | +| `wvb-ffi` | UniFFI bindings (Kotlin/Swift) | Android / iOS | +| `@wvb/remote-*` | Remote server providers (local, AWS, Cloudflare) | your update backend | + +## The bundle format in one line + +A `.wvb` file is **`[ Header | Index | Data ]`**: a 17-byte header (magic number, version, index +size, checksum), an index mapping each file path to its location and HTTP metadata, and an +LZ4-compressed data section. The full byte-level spec lives in the +[`wvb` crate docs](https://docs.rs/wvb). diff --git a/content/docs/meta.json b/content/docs/meta.json new file mode 100644 index 0000000..5ade334 --- /dev/null +++ b/content/docs/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Documentation", + "pages": ["index", "concepts", "remote-updates", "cli", "configuration", "guides"] +} diff --git a/content/docs/remote-updates.mdx b/content/docs/remote-updates.mdx new file mode 100644 index 0000000..b3e54bf --- /dev/null +++ b/content/docs/remote-updates.mdx @@ -0,0 +1,260 @@ +--- +title: Remote updates & local testing +description: Publish a new bundle version, the server contract, how clients pick it up, and how to run the whole loop locally. +--- + +This is the end-to-end guide to shipping bundle updates over the air: how you publish a new version, +what the server contract is, how clients pick it up, and — importantly — **how to run the whole loop +locally** before you involve a real server. + +If you haven't yet, read [Concepts](/docs/concepts) for the meaning of _bundle_, _source_, +_manifest_, _channel_, _integrity_, and _signature_. + +## The lifecycle at a glance + +```text + developer machine / CI remote server end-user device +┌──────────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐ +│ wvb pack ./dist │ │ │ │ │ +│ → app_1.1.0.wvb │ │ │ │ updater.getUpdate() │ +│ wvb upload ───────────────── upload ───▶ │ store version │ │ isAvailable? ──┐ │ +│ (+integrity +signature)│ │ │ │ │ │ +│ wvb deploy ───────────────── deploy ──▶ │ mark deployed │ ◀──────── HEAD /bundles/app │ +│ (--channel beta) │ │ (per channel) │ ───────▶ GET /bundles/app │ +└──────────────────────────┘ └──────────────────────┘ │ verify + install ◀┘ │ + └──────────────────────┘ +``` + +1. **Pack** your build into a `.wvb`. +2. **Upload** it to the server (optionally attaching an integrity hash and a signature). +3. **Deploy** that version so clients on a given channel start seeing it. +4. The client's **updater** checks for a newer deployed version, downloads it, **verifies** it, and + installs it into the `remote` source — after which it's served instead of the builtin bundle. + +## Publishing from the command line + +All publishing flows through the `wvb` CLI (`@wvb/cli`) and a `wvb.config.ts`. A minimal config that +targets a real server: + +```ts +// wvb.config.ts +import { defineConfig } from '@wvb/config'; + +export default defineConfig({ + pack: { + srcDir: './dist', // your build output + outFile: 'app', // → app.wvb (name from package.json if omitted) + }, + remote: { + endpoint: 'https://updates.example.com', + bundleName: 'app', + // version: () => readVersionSomehow(), // defaults to package.json version + uploader: /* a provider's uploader */, + deployer: /* a provider's deployer */, + // integrity: { algorithm: 'sha384' }, // attach an integrity hash (optional) + // signature: { /* see below */ }, // attach a signature (optional) + }, +}); +``` + +`uploader` and `deployer` come from a **remote provider** package — `@wvb/remote-aws`, +`@wvb/remote-cloudflare`, or `@wvb/remote-local` for local testing (below). See the +[Configuration reference](/docs/configuration) for every field. + +Then, from your project: + +```sh +wvb pack # build the .wvb from pack.srcDir +wvb upload app 1.1.0 --deploy # upload + deploy in one step +# or, separately: +wvb upload app 1.1.0 # upload only +wvb deploy app 1.1.0 # make it the deployed version +``` + +`wvb upload` packs nothing by default — it uploads an existing `.wvb` (run `wvb pack` first, or pass +`--file`). With `--deploy` it also deploys; add `--channel beta` to deploy to a channel. See the +[CLI reference](/docs/cli) for all flags. + +## The remote HTTP contract + +A Webview Bundle server is any HTTP server that implements four endpoints. You can use a provider +(AWS/Cloudflare/local) or build your own to this spec. + +| Method & path | Purpose | +| ------------------------------- | ------------------------------------------------ | +| `GET /bundles` | List deployed bundles: `[{ "name", "version" }]` | +| `HEAD /bundles/{name}` | Current version's metadata (headers only) | +| `GET /bundles/{name}` | Download the current version | +| `GET /bundles/{name}/{version}` | Download a specific version | + +Metadata travels in response headers: + +- `Webview-Bundle-Name` — bundle name **(required)** +- `Webview-Bundle-Version` — version **(required)** +- `Webview-Bundle-Integrity` — integrity hash (optional) +- `Webview-Bundle-Signature` — signature (optional) +- plus standard `ETag` / `Last-Modified` + +Status codes: `404` when a bundle/version isn't deployed; `403` when fetching a specific +non-deployed version is disallowed (the `allowOtherVersions` option). Downloads use +`Content-Type: application/webview-bundle`. The full spec, including request/response examples, is in +the [`wvb` crate docs](https://docs.rs/wvb). + +## Channels (staged rollouts) + +A channel routes different versions to different audiences. Deploy to one with `--channel`: + +```sh +wvb upload app 1.2.0 --deploy --channel beta # only beta clients see 1.2.0 +wvb deploy app 1.2.0 # later, promote to the default channel +``` + +Clients select a channel when checking for updates (e.g. `updater_get_update` with a channel-aware +config, or `Remote::list_bundles(Some(&"beta".into()))` in Rust). No channel = the default channel. + +## Integrity and signatures + +Attach verification material at **upload** time, and verify it at **download** time. + +**Publish side** (`wvb.config.ts`): the uploader computes an integrity hash and/or signs the bundle. + +```ts +remote: { + endpoint: 'https://updates.example.com', + uploader, deployer, + integrity: { algorithm: 'sha384' }, // → "sha384:…" + signature: { // sign the integrity string + algorithm: 'ecdsa', + curve: 'p256', + hash: 'sha256', + key: { format: 'pkcs8', data: privateKeyDer }, + }, +} +``` + +Skip them per-run with `wvb upload --skip-integrity` / `--skip-signature`. + +**Client side**: the updater enforces an [integrity policy](/docs/concepts#integrity) and, if you +configure a public key, a signature verifier. In Rust: + +```rust +use wvb::integrity::{IntegrityChecker, IntegrityPolicy}; +use wvb::signature::{Ed25519Verifier, SignatureVerifier}; +use wvb::updater::{Updater, UpdaterConfig}; +use std::sync::Arc; + +let verifier = SignatureVerifier::Ed25519(Arc::new( + Ed25519Verifier::from_public_key_pem(PUBLIC_KEY_PEM)?, +)); +let config = UpdaterConfig::new() + .integrity_policy(IntegrityPolicy::Strict) // require & verify integrity + .signature_verifier(verifier); // require & verify signature +let updater = Updater::new(source, remote, Some(config)); +``` + +The Electron and Tauri updaters expose the same options through their config; the Android/iOS +bindings expose the `IntegrityChecker`/policy types directly. + +## How clients install an update + +The high-level `Updater` ties a source to a remote and does check → download → verify → install: + +```rust +let update = updater.get_update("app").await?; +if update.is_available { + updater.download_update("app", None).await?; // verifies, then writes into the remote source + // reload the webview to pick up the new version +} +``` + +`download_update` writes the verified bundle into the `remote` source directory and records it as the +current version, so it's served on the next load. Each platform guide shows the idiomatic call: +[Electron](/docs/guides/electron#3-call-the-api-from-the-renderer-optional), +[Tauri](/docs/guides/tauri#4-drive-updates-from-the-frontend-optional), +[Android](/docs/guides/android#over-the-air-updates), +[iOS](/docs/guides/ios#over-the-air-updates). + +## Testing locally + +You don't need a cloud account to exercise the full update loop. There are two local tools. + +### `wvb remote local` — a real local update server + +`@wvb/remote-local` provides an uploader/deployer that write to a local directory (default +`~/.wvb/local`), and `wvb remote local` serves that directory over HTTP using the same contract a +production server implements. + +**1. Point your config at the local provider:** + +```ts +// wvb.config.ts +import { defineConfig } from '@wvb/config'; +import { localRemote } from '@wvb/remote-local'; + +const local = localRemote({ baseDir: '~/.wvb/local' }); // { uploader, deployer } + +export default defineConfig({ + pack: { srcDir: './dist', outFile: 'app' }, + remote: { + endpoint: 'http://localhost:4313', + bundleName: 'app', + uploader: local.uploader, + deployer: local.deployer, + }, +}); +``` + +**2. Publish a version into the local store:** + +```sh +wvb pack +wvb upload app 1.1.0 --deploy # writes app_1.1.0.wvb into ~/.wvb/local and deploys it +``` + +**3. Start the local server:** + +```sh +wvb remote local # serves ~/.wvb/local on http://localhost:4313 +# options: --base-dir ./.wvb/local --port 4313 --allow-other-versions +``` + +**4. Point your app's updater at it** by setting its endpoint to `http://localhost:4313` +(`updater: { remote: { endpoint: 'http://localhost:4313' } }` in Electron, `Remote::new(...)` in +Tauri, the remote URL in your Android/iOS updater). Now `getUpdate` / `downloadUpdate` hit your local +server and install the bundle exactly as production would. + + + On the Android emulator, reach your host machine at `http://10.0.2.2:4313` instead of `localhost`. + + +You can also verify the server directly with the CLI's client commands: + +```sh +wvb remote list --endpoint http://localhost:4313 +wvb remote current app --endpoint http://localhost:4313 +wvb download app --endpoint http://localhost:4313 --out /tmp/app.wvb +``` + +### `wvb serve` — preview a single packed bundle + +To just look at what's _inside_ a `.wvb` (no update server, no manifest), serve its files over HTTP: + +```sh +wvb serve ./app.wvb # serves the bundle's files at http://localhost:4312 +wvb serve ./app.wvb --port 8080 +``` + +This is handy for confirming a pack produced the files and headers you expect, before you upload. + +## Provider packages + +For real deployments, swap the local provider for a cloud one: + +- **AWS** — [`@wvb/remote-aws`](https://github.com/webview-bundle/webview-bundle/tree/main/packages/remote/aws) (+ + [`@wvb/remote-aws-provider-pulumi`](https://github.com/webview-bundle/webview-bundle/tree/main/packages/remote/aws-provider-pulumi) to provision it) +- **Cloudflare** — [`@wvb/remote-cloudflare`](https://github.com/webview-bundle/webview-bundle/tree/main/packages/remote/cloudflare) (+ + [`@wvb/remote-cloudflare-provider-pulumi`](https://github.com/webview-bundle/webview-bundle/tree/main/packages/remote/cloudflare-provider-pulumi)) + +Each exposes a compatible `uploader`/`deployer` for `wvb.config.ts` and a server that implements the +[HTTP contract](#the-remote-http-contract) above. See their READMEs and the +[`examples/`](https://github.com/webview-bundle/webview-bundle/tree/main/examples) for provisioning with Pulumi. diff --git a/mise.toml b/mise.toml index 141d32f..4581550 100644 --- a/mise.toml +++ b/mise.toml @@ -1,2 +1,2 @@ [tools] -node = "22.20.0" +node = "24.15.0" diff --git a/package.json b/package.json index e41f740..0ad55d0 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,9 @@ { "name": "webview-bundle-website", + "private": true, "type": "module", "scripts": { - "postinstall": "yarn typegen", + "postinstall": "yarn gen:fumadocs", "dev": "vite dev", "build": "vite build", "preview": "vite preview", @@ -10,40 +11,44 @@ "lint": "oxlint --type-aware", "lint:fix": "oxlint --type-aware --fix", "format": "oxfmt", - "typegen": "yarn typegen:cloudflare && yarn typegen:fumadocs", - "typegen:fumadocs": "fumadocs-mdx", - "typegen:cloudflare": "wrangler types" + "gen:cf-types": "wrangler types", + "gen:fumadocs": "fumadocs-mdx" }, "dependencies": { - "@base-ui/react": "1.4.0", - "@date-fns/tz": "^1.4.1", - "@fontsource-variable/jetbrains-mono": "^5.2.8", - "@fontsource/inter": "^5.2.8", - "@tanstack/react-router": "1.168.23", - "@tanstack/react-start": "1.167.42", + "@base-ui/react": "1.5.0", + "@date-fns/tz": "1.5.0", + "@fontsource-variable/inter": "5.2.8", + "@fontsource-variable/jetbrains-mono": "5.2.8", + "@sentry/cloudflare": "10.53.1", + "@sentry/tanstackstart-react": "10.53.1", + "@tanstack/react-router": "1.170.8", + "@tanstack/react-start": "1.168.11", "@types/mdx": "2.0.13", - "date-fns": "^4.1.0", - "feed": "^5.2.0", + "clsx": "2.1.1", + "date-fns": "4.3.0", "fumadocs-core": "16.7.16", "fumadocs-mdx": "14.3.0", "fumadocs-ui": "16.7.16", - "react": "19.2.5", - "react-dom": "19.2.5" + "jose": "6.2.3", + "react": "19.2.6", + "react-dom": "19.2.6", + "tailwind-merge": "3.5.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.32.3", - "@tailwindcss/vite": "^4.2.2", - "@types/node": "^22", - "@types/react": "^19.2.14", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.1", - "oxfmt": "0.45.0", - "oxlint": "1.60.0", - "oxlint-tsgolint": "0.21.1", - "tailwindcss": "4.2.2", + "@cloudflare/vite-plugin": "1.38.0", + "@sentry/vite-plugin": "5.3.0", + "@tailwindcss/vite": "4.3.0", + "@types/node": "^24", + "@types/react": "19.2.15", + "@types/react-dom": "19.2.3", + "@vitejs/plugin-react": "6.0.2", + "oxfmt": "0.51.0", + "oxlint": "1.66.0", + "oxlint-tsgolint": "0.23.0", + "tailwindcss": "4.3.0", "typescript": "6.0.3", - "vite": "^8.0.8", - "wrangler": "4.83.0" + "vite": "8.0.14", + "wrangler": "4.94.0" }, - "packageManager": "yarn@4.14.1" + "packageManager": "yarn@4.15.0" } diff --git a/public/logo2.png b/public/logo2.png new file mode 100644 index 0000000..273e246 Binary files /dev/null and b/public/logo2.png differ diff --git a/public/logo3.png b/public/logo3.png new file mode 100644 index 0000000..ebdc0bd Binary files /dev/null and b/public/logo3.png differ diff --git a/src/layouts/home/HomeLayout.tsx b/src/layouts/home/HomeLayout.tsx deleted file mode 100644 index d3cb0f6..0000000 --- a/src/layouts/home/HomeLayout.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { ComponentProps } from 'react'; -import { Header } from './components/Header'; - -interface Props extends ComponentProps<'main'> {} - -export function HomeLayout(props: Props) { - const { children, ...restProps } = props; - - return ( -
-
- {children} -
- ); -} diff --git a/src/layouts/home/Landing.tsx b/src/layouts/home/Landing.tsx new file mode 100644 index 0000000..a32b06f --- /dev/null +++ b/src/layouts/home/Landing.tsx @@ -0,0 +1,21 @@ +import { CallToAction } from './components/CallToAction'; +import { Features } from './components/Features'; +import { Footer } from './components/Footer'; +import { Hero } from './components/Hero'; +import { Navbar } from './components/Navbar'; +import { Platforms } from './components/Platforms'; + +export function Landing() { + return ( +
+ +
+ + + + +
+
+
+ ); +} diff --git a/src/layouts/home/components/ArchitectureDiagram.tsx b/src/layouts/home/components/ArchitectureDiagram.tsx new file mode 100644 index 0000000..cfa9807 --- /dev/null +++ b/src/layouts/home/components/ArchitectureDiagram.tsx @@ -0,0 +1,75 @@ +import { SOURCE_FILES, WEBVIEW_HOSTS } from '../data'; +import { ChevronRightIcon } from './icons'; +import { Logo } from './Logo'; + +function ColumnLabel({ children }: { children: React.ReactNode }) { + return ( +
+ {children} +
+ ); +} + +export function ArchitectureDiagram() { + return ( +
+
+ + Architecture + +
+ +
+ {/* Your source */} +
+ your source +
+ {SOURCE_FILES.map(file => ( +
+ + {file} +
+ ))} +
+
+ + {/* The bundle */} +
+ bundle +
+
+ +
app.wvb
+
2.1 MB · ed25519
+
+
+ + +
+ + {/* Webview host */} +
+ webview host +
+ {WEBVIEW_HOSTS.map(({ platform, runtime }) => ( +
+ {platform} + {runtime} +
+ ))} +
+
+
+ +
+ deterministic · signed · offline +
+
+ ); +} diff --git a/src/layouts/home/components/CallToAction.tsx b/src/layouts/home/components/CallToAction.tsx new file mode 100644 index 0000000..cb2105b --- /dev/null +++ b/src/layouts/home/components/CallToAction.tsx @@ -0,0 +1,25 @@ +import { INSTALL_COMMANDS } from '../data'; + +export function CallToAction() { + return ( +
+
+
+ Start now +
+

+ Three commands from zero to a mounted bundle. +

+
+
+            {INSTALL_COMMANDS.map(command => (
+              
+                $ {command}
+              
+            ))}
+          
+
+
+
+ ); +} diff --git a/src/layouts/home/components/Features.tsx b/src/layouts/home/components/Features.tsx new file mode 100644 index 0000000..95633ae --- /dev/null +++ b/src/layouts/home/components/Features.tsx @@ -0,0 +1,37 @@ +import { cn } from '../../../lib/cn'; +import { FEATURES } from '../data'; + +export function Features() { + return ( +
+
+ {FEATURES.map((feature, index) => ( +
+
+ {feature.number} +
+
+

+ {feature.title} +

+

+ {feature.description} +

+
+
+
+                {feature.code}
+              
+
+
+ ))} +
+
+ ); +} diff --git a/src/layouts/home/components/Footer.tsx b/src/layouts/home/components/Footer.tsx new file mode 100644 index 0000000..4ec0a47 --- /dev/null +++ b/src/layouts/home/components/Footer.tsx @@ -0,0 +1,33 @@ +import { DOCS_URL, GITHUB_URL } from '../data'; +import { Logo } from './Logo'; + +const FOOTER_LINKS = [ + { label: 'docs', href: DOCS_URL }, + { label: 'github', href: GITHUB_URL }, + { label: 'discussions', href: `${GITHUB_URL}/discussions` }, + { label: 'changelog', href: `${GITHUB_URL}/releases` }, +]; + +export function Footer() { + return ( +
+
+
+ + webview-bundle · MIT · 2026 +
+
+ {FOOTER_LINKS.map(link => ( + + {link.label} + + ))} +
+
+
+ ); +} diff --git a/src/layouts/home/components/Header.tsx b/src/layouts/home/components/Header.tsx deleted file mode 100644 index 421a798..0000000 --- a/src/layouts/home/components/Header.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { ComponentProps } from 'react'; - -interface Props extends ComponentProps<'header'> {} - -export function Header(props: Props) { - return ( -
-
- -

WEBVIEW BUNDLE

-
-
- ); -} diff --git a/src/layouts/home/components/Hero.tsx b/src/layouts/home/components/Hero.tsx new file mode 100644 index 0000000..161b21a --- /dev/null +++ b/src/layouts/home/components/Hero.tsx @@ -0,0 +1,52 @@ +import { DOCS_URL, GITHUB_URL } from '../data'; +import { ArchitectureDiagram } from './ArchitectureDiagram'; +import { ArrowRightIcon, GitHubIcon } from './icons'; + +export function Hero() { + return ( +
+ {/* Faint vertical grid lines */} +
+ +
+

+ Ship web +
+ inside native. +

+

+ A bundle format and runtime for delivering web resources to any webview-mounted platform — + signed, versioned, and guaranteed to work offline. +

+ +
+ +
+ +
+
+ ); +} diff --git a/src/layouts/home/components/Logo.tsx b/src/layouts/home/components/Logo.tsx new file mode 100644 index 0000000..4d79391 --- /dev/null +++ b/src/layouts/home/components/Logo.tsx @@ -0,0 +1,16 @@ +import { ComponentProps } from 'react'; + +interface LogoProps extends Omit, 'src' | 'alt'> {} + +export function Logo({ width = 28, height = 28, className, ...props }: LogoProps) { + return ( + Webview Bundle logo + ); +} diff --git a/src/layouts/home/components/MobileMenu.tsx b/src/layouts/home/components/MobileMenu.tsx new file mode 100644 index 0000000..5ecce77 --- /dev/null +++ b/src/layouts/home/components/MobileMenu.tsx @@ -0,0 +1,65 @@ +import { Dialog } from '@base-ui/react/dialog'; +import { DOCS_URL, GITHUB_URL, NAV_ITEMS } from '../data'; +import { CloseIcon, GitHubIcon, MenuIcon } from './icons'; +import { Logo } from './Logo'; + +/** + * Compact navigation for small screens. The hamburger button is hidden from + * `md` up, where the inline nav in {@link Navbar} takes over. + */ +export function MobileMenu() { + return ( + + + + + + + + +
+ + + webview-bundle + + + + +
+ + + +
+ Get started} + className="inline-flex items-center justify-center rounded-md bg-brand px-4 py-2.5 text-sm font-medium text-white transition-colors hover:bg-brand-hover" + /> + + + GitHub + +
+
+
+
+ ); +} diff --git a/src/layouts/home/components/Navbar.tsx b/src/layouts/home/components/Navbar.tsx new file mode 100644 index 0000000..d57d1b3 --- /dev/null +++ b/src/layouts/home/components/Navbar.tsx @@ -0,0 +1,50 @@ +import { DOCS_URL, GITHUB_URL, NAV_ITEMS } from '../data'; +import { GitHubIcon } from './icons'; +import { Logo } from './Logo'; +import { MobileMenu } from './MobileMenu'; +import { ThemeToggle } from './ThemeToggle'; + +export function Navbar() { + return ( +
+
+ + + webview-bundle + + + + + +
+
+ ); +} diff --git a/src/layouts/home/components/Platforms.tsx b/src/layouts/home/components/Platforms.tsx new file mode 100644 index 0000000..e503f39 --- /dev/null +++ b/src/layouts/home/components/Platforms.tsx @@ -0,0 +1,29 @@ +import { DOCS_URL, PLATFORMS } from '../data'; + +export function Platforms() { + return ( +
+
+ +
+ {PLATFORMS.map(platform => ( +
+
platform
+
{platform}
+
+ ))} +
+
+
+ ); +} diff --git a/src/layouts/home/components/ThemeToggle.tsx b/src/layouts/home/components/ThemeToggle.tsx new file mode 100644 index 0000000..059bfd1 --- /dev/null +++ b/src/layouts/home/components/ThemeToggle.tsx @@ -0,0 +1,36 @@ +import { useTheme } from 'next-themes'; +import { useEffect, useState } from 'react'; +import { cn } from '../../../lib/cn'; +import { MoonIcon, SunIcon } from './icons'; + +interface ThemeToggleProps { + className?: string; +} + +export function ThemeToggle({ className }: ThemeToggleProps) { + const { resolvedTheme, setTheme } = useTheme(); + const [mounted, setMounted] = useState(false); + + // Avoid a hydration mismatch: the resolved theme is only known on the client. + useEffect(() => { + setMounted(true); + }, []); + + const isDark = mounted && resolvedTheme === 'dark'; + + return ( + + ); +} diff --git a/src/layouts/home/components/icons.tsx b/src/layouts/home/components/icons.tsx new file mode 100644 index 0000000..ccab0ae --- /dev/null +++ b/src/layouts/home/components/icons.tsx @@ -0,0 +1,107 @@ +import { ComponentProps } from 'react'; + +type IconProps = ComponentProps<'svg'>; + +export function SunIcon(props: IconProps) { + return ( + + ); +} + +export function MoonIcon(props: IconProps) { + return ( + + ); +} + +export function ArrowRightIcon(props: IconProps) { + return ( + + ); +} + +export function ChevronRightIcon(props: IconProps) { + return ( + + ); +} + +export function GitHubIcon(props: IconProps) { + return ( + + ); +} + +export function MenuIcon(props: IconProps) { + return ( + + ); +} + +export function CloseIcon(props: IconProps) { + return ( + + ); +} diff --git a/src/layouts/home/data.ts b/src/layouts/home/data.ts new file mode 100644 index 0000000..884776f --- /dev/null +++ b/src/layouts/home/data.ts @@ -0,0 +1,76 @@ +export const GITHUB_URL = 'https://github.com/webview-bundle/webview-bundle'; +export const DOCS_URL = '/docs'; + +export interface NavItem { + label: string; + href: string; +} + +export const NAV_ITEMS: NavItem[] = [ + { label: 'Docs', href: DOCS_URL }, + { label: 'How it works', href: '#how-it-works' }, + { label: 'Platforms', href: '#platforms' }, + { label: 'Reference', href: '/docs/cli' }, +]; + +/** Files shown on the left ("your source") of the architecture diagram. */ +export const SOURCE_FILES = ['app/main.tsx', 'styles/app.css', 'assets/*.png', 'package.json']; + +export interface WebviewHost { + platform: string; + runtime: string; +} + +/** Hosts shown on the right ("webview host") of the architecture diagram. */ +export const WEBVIEW_HOSTS: WebviewHost[] = [ + { platform: 'iOS', runtime: 'WKWebView' }, + { platform: 'Android', runtime: 'WebView' }, + { platform: 'Desktop', runtime: 'Tauri / Electron' }, + { platform: 'RN', runtime: 'react-native-webview' }, +]; + +export interface Feature { + number: string; + title: string; + description: string; + code: string; +} + +export const FEATURES: Feature[] = [ + { + number: '01', + title: 'Offline-first, by default.', + description: + "Every bundle carries its full dependency graph. Mount it once and the app keeps working — subway, plane, dead network, doesn't matter.", + code: 'await mount("app.wvb", { offline: true });', + }, + { + number: '02', + title: 'Written in web code.', + description: + 'Author with React, Vue, Svelte, or vanilla HTML. The build step emits a single .wvb artifact from any bundler output — no custom toolchain to learn.', + code: 'wvb build ./dist --sign ed25519', + }, + { + number: '03', + title: 'Cross-platform contract.', + description: + 'One bundle format, identical runtime behavior on iOS WKWebView, Android WebView, Tauri, and Electron. No per-host packaging branches.', + code: '// Same bundle. Every host.', + }, + { + number: '04', + title: 'Native where it matters.', + description: + 'A typed bridge exposes host capabilities to your web code. Streaming IPC with cancellation and backpressure, adapters for Swift, Kotlin, and Rust.', + code: 'const result = await native.fs.read(path);', + }, +]; + +export const PLATFORMS = ['iOS', 'Android', 'macOS', 'Windows', 'Linux']; + +export const INSTALL_COMMANDS = [ + 'npm install -g webview-bundle', + 'wvb init my-app', + 'wvb build ./my-app --out app.wvb', +]; diff --git a/src/layouts/home/index.tsx b/src/layouts/home/index.tsx index c0c8fae..c53b4d2 100644 --- a/src/layouts/home/index.tsx +++ b/src/layouts/home/index.tsx @@ -1 +1 @@ -export { HomeLayout } from './HomeLayout'; +export { Landing } from './Landing'; diff --git a/src/lib/access.ts b/src/lib/access.ts new file mode 100644 index 0000000..1c9d4a4 --- /dev/null +++ b/src/lib/access.ts @@ -0,0 +1,127 @@ +import { createRemoteJWKSet, jwtVerify, type JWTPayload } from 'jose'; + +/** + * Cloudflare Access JWT validation. + * + * Preview deployments (served from `*.workers.dev`) are gated behind a + * Cloudflare Access login: Access authenticates the user at the edge and + * forwards the request with a signed JWT, which we verify here as the + * enforcement point. Production (a custom domain) stays public. + * + * Required vars (see wrangler.jsonc): + * - `CF_ACCESS_TEAM_DOMAIN`: full team domain URL, e.g. + * `https://your-team.cloudflareaccess.com`. + * - `CF_ACCESS_AUD`: the Access application's Application Audience (AUD) tag. + * + * @see https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/validating-json + */ + +/** Header Cloudflare Access sets on every authenticated request. */ +const ACCESS_JWT_HEADER = 'cf-access-jwt-assertion'; +/** Cookie fallback (not guaranteed to be forwarded). */ +const ACCESS_JWT_COOKIE = 'CF_Authorization'; + +/** + * Remote JWKS sets, cached per team domain for the lifetime of the isolate. + * `createRemoteJWKSet` additionally caches the fetched keys internally and + * only refetches when an unknown key id is seen, so this avoids hitting the + * certs endpoint on every request. + */ +const jwksByTeamDomain = new Map>(); + +function getJwks(teamDomain: string) { + let jwks = jwksByTeamDomain.get(teamDomain); + if (!jwks) { + jwks = createRemoteJWKSet(new URL(`${teamDomain}/cdn-cgi/access/certs`)); + jwksByTeamDomain.set(teamDomain, jwks); + } + return jwks; +} + +/** Whether this request targets a preview deployment that must be gated. */ +function isPreviewDeployment(url: URL): boolean { + return url.hostname.endsWith('.workers.dev'); +} + +/** Read the Access JWT from the header, falling back to the cookie. */ +function readAccessToken(request: Request): string | null { + const header = request.headers.get(ACCESS_JWT_HEADER); + if (header != null && header !== '') { + return header; + } + + const cookie = request.headers.get('cookie'); + if (cookie == null || cookie === '') { + return null; + } + const match = cookie.match(new RegExp(`(?:^|;\\s*)${ACCESS_JWT_COOKIE}=([^;]+)`)); + if (match == null) { + return null; + } + return decodeURIComponent(match[1]!); +} + +/** + * Verify a Cloudflare Access JWT. Checks the signature against the team's + * public keys and validates the `iss`, `aud`, and `exp` claims. + * + * @throws when the token is missing, malformed, expired, or fails verification. + */ +export async function verifyAccessJwt( + token: string, + teamDomain: string, + aud: string +): Promise { + const { payload } = await jwtVerify(token, getJwks(teamDomain), { + issuer: teamDomain, + audience: aud, + }); + return payload; +} + +/** + * Enforce Cloudflare Access on preview deployments. + * + * @returns a `Response` to short-circuit the request when access is denied, or + * `null` when the request may proceed to the app. + */ +export async function enforceAccess(request: Request, env: Env): Promise { + const url = new URL(request.url); + + // Only guard previews; a custom production domain is served publicly. + if (!isPreviewDeployment(url)) { + return null; + } + + // Annotated as `string` so the guard below narrows correctly: wrangler types + // the configured values as string literals (e.g. "" until they are filled in). + const teamDomain: string = env.CF_ACCESS_TEAM_DOMAIN; + const aud: string = env.CF_ACCESS_AUD; + + // Fail closed: an unconfigured preview must not be publicly viewable. + if (teamDomain === '' || aud === '') { + return new Response('Cloudflare Access is not configured for this preview deployment.', { + status: 500, + headers: { 'content-type': 'text/plain; charset=utf-8' }, + }); + } + + const token = readAccessToken(request); + if (token == null || token === '') { + return new Response('Missing Cloudflare Access token.', { + status: 401, + headers: { 'content-type': 'text/plain; charset=utf-8' }, + }); + } + + try { + await verifyAccessJwt(token, teamDomain, aud); + return null; + } catch (error) { + const message = error instanceof Error ? error.message : 'verification failed'; + return new Response(`Invalid Cloudflare Access token: ${message}`, { + status: 403, + headers: { 'content-type': 'text/plain; charset=utf-8' }, + }); + } +} diff --git a/src/lib/cn.ts b/src/lib/cn.ts new file mode 100644 index 0000000..70326b7 --- /dev/null +++ b/src/lib/cn.ts @@ -0,0 +1,7 @@ +import { clsx, type ClassValue } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +/** Merge conditional class names and resolve conflicting Tailwind utilities. */ +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/src/mdx.tsx b/src/mdx.tsx index 3b2d56f..bffcfe7 100644 --- a/src/mdx.tsx +++ b/src/mdx.tsx @@ -1,3 +1,5 @@ +import { Callout } from 'fumadocs-ui/components/callout'; +import { Card, Cards } from 'fumadocs-ui/components/card'; import { ImageZoom } from 'fumadocs-ui/components/image-zoom'; import * as TabsComponents from 'fumadocs-ui/components/tabs'; import defaultMdxComponents from 'fumadocs-ui/mdx'; @@ -7,6 +9,9 @@ export function getMDXComponents(components?: MDXComponents) { return { ...defaultMdxComponents, img: props => , + Callout, + Card, + Cards, ...TabsComponents, ...components, } satisfies MDXComponents; diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 3e58cec..cf652ae 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -9,16 +9,10 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' -import { Route as RssDotxmlRouteImport } from './routes/rss[.]xml' import { Route as IndexRouteImport } from './routes/index' import { Route as DocsSplatRouteImport } from './routes/docs/$' import { Route as ApiSearchRouteImport } from './routes/api/search' -const RssDotxmlRoute = RssDotxmlRouteImport.update({ - id: '/rss.xml', - path: '/rss.xml', - getParentRoute: () => rootRouteImport, -} as any) const IndexRoute = IndexRouteImport.update({ id: '/', path: '/', @@ -37,47 +31,36 @@ const ApiSearchRoute = ApiSearchRouteImport.update({ export interface FileRoutesByFullPath { '/': typeof IndexRoute - '/rss.xml': typeof RssDotxmlRoute '/api/search': typeof ApiSearchRoute '/docs/$': typeof DocsSplatRoute } export interface FileRoutesByTo { '/': typeof IndexRoute - '/rss.xml': typeof RssDotxmlRoute '/api/search': typeof ApiSearchRoute '/docs/$': typeof DocsSplatRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute - '/rss.xml': typeof RssDotxmlRoute '/api/search': typeof ApiSearchRoute '/docs/$': typeof DocsSplatRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/' | '/rss.xml' | '/api/search' | '/docs/$' + fullPaths: '/' | '/api/search' | '/docs/$' fileRoutesByTo: FileRoutesByTo - to: '/' | '/rss.xml' | '/api/search' | '/docs/$' - id: '__root__' | '/' | '/rss.xml' | '/api/search' | '/docs/$' + to: '/' | '/api/search' | '/docs/$' + id: '__root__' | '/' | '/api/search' | '/docs/$' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute - RssDotxmlRoute: typeof RssDotxmlRoute ApiSearchRoute: typeof ApiSearchRoute DocsSplatRoute: typeof DocsSplatRoute } declare module '@tanstack/react-router' { interface FileRoutesByPath { - '/rss.xml': { - id: '/rss.xml' - path: '/rss.xml' - fullPath: '/rss.xml' - preLoaderRoute: typeof RssDotxmlRouteImport - parentRoute: typeof rootRouteImport - } '/': { id: '/' path: '/' @@ -104,7 +87,6 @@ declare module '@tanstack/react-router' { const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, - RssDotxmlRoute: RssDotxmlRoute, ApiSearchRoute: ApiSearchRoute, DocsSplatRoute: DocsSplatRoute, } @@ -113,10 +95,11 @@ export const routeTree = rootRouteImport ._addFileTypes() import type { getRouter } from './router.tsx' -import type { createStart } from '@tanstack/react-start' +import type { startInstance } from './start.ts' declare module '@tanstack/react-start' { interface Register { ssr: true router: Awaited> + config: Awaited> } } diff --git a/src/router.tsx b/src/router.tsx index 822a950..7a64e8e 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -1,3 +1,4 @@ +import * as Sentry from '@sentry/tanstackstart-react'; import { createRouter } from '@tanstack/react-router'; import { routeTree } from './routeTree.gen'; @@ -6,5 +7,13 @@ export function getRouter() { routeTree, scrollRestoration: true, }); + + if (!router.isServer) { + Sentry.init({ + dsn: 'https://d1893624a683484f8260184a6025be0f@o4503970038611968.ingest.us.sentry.io/4503970040053760', + integrations: [], + }); + } + return router; } diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 603a387..5e8b3ea 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -42,7 +42,7 @@ function RootDocument({ children }: Readonly<{ children: ReactNode }>) { - {children} + {children} diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 1fa2baa..8205375 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -1,14 +1,10 @@ import { createFileRoute } from '@tanstack/react-router'; -import { HomeLayout } from '../layouts/home'; +import { Landing } from '../layouts/home'; export const Route = createFileRoute('/')({ component: Home, }); function Home() { - return ( - -

Hello World

-
- ); + return ; } diff --git a/src/routes/rss[.]xml.ts b/src/routes/rss[.]xml.ts deleted file mode 100644 index fe53489..0000000 --- a/src/routes/rss[.]xml.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createFileRoute } from '@tanstack/react-router'; -import { getRSS } from '../rss'; - -export const Route = createFileRoute('/rss.xml')({ - server: { - handlers: { - GET: async () => new Response(getRSS()), - }, - }, -}); diff --git a/src/rss.ts b/src/rss.ts deleted file mode 100644 index 3e7b92f..0000000 --- a/src/rss.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Feed } from 'feed'; -import { docSource } from './doc'; - -const baseUrl = 'https://wvb.dev'; - -export function getRSS() { - const feed = new Feed({ - title: 'Fumadocs Blog', - id: `${baseUrl}/blog`, - link: `${baseUrl}/blog`, - language: 'en', - image: `${baseUrl}/banner.png`, - favicon: `${baseUrl}/icon.png`, - copyright: 'All rights reserved 2025, Fuma Nama', - }); - - for (const page of docSource.getPages()) { - feed.addItem({ - id: page.url, - title: page.data.title, - description: page.data.description, - link: `${baseUrl}${page.url}`, - date: page.data.lastModified != null ? new Date(page.data.lastModified) : new Date(), - author: [ - { - name: 'Seokju Na', - email: 'seokju.me@gmail.com', - }, - ], - }); - } - - return feed.rss2(); -} diff --git a/src/server.ts b/src/server.ts new file mode 100644 index 0000000..bd3eb6e --- /dev/null +++ b/src/server.ts @@ -0,0 +1,21 @@ +import * as Sentry from '@sentry/cloudflare'; +import { wrapFetchWithSentry } from '@sentry/tanstackstart-react'; +import entry from '@tanstack/react-start/server-entry'; +import { enforceAccess } from './lib/access'; + +async function handler(request: Request, env: Env, ctx: ExecutionContext): Promise { + const denied = await enforceAccess(request, env); + if (denied != null) { + return denied; + } + return (entry as any).fetch(request, env, ctx); +} + +export default Sentry.withSentry( + () => ({ + dsn: 'https://d1893624a683484f8260184a6025be0f@o4503970038611968.ingest.us.sentry.io/4503970040053760', + sendDefaultPii: false, + }), + // @ts-expect-error - TanStack's ServerEntry types fetch as (request, opts?), not (request, env, ctx) + wrapFetchWithSentry({ fetch: handler }) +) satisfies ExportedHandler; diff --git a/src/start.ts b/src/start.ts new file mode 100644 index 0000000..ace8d04 --- /dev/null +++ b/src/start.ts @@ -0,0 +1,12 @@ +import { + sentryGlobalFunctionMiddleware, + sentryGlobalRequestMiddleware, +} from '@sentry/tanstackstart-react'; +import { createStart } from '@tanstack/react-start'; + +export const startInstance = createStart(() => { + return { + requestMiddleware: [sentryGlobalRequestMiddleware], + functionMiddleware: [sentryGlobalFunctionMiddleware], + }; +}); diff --git a/src/styles.css b/src/styles.css index 3902504..aa3707c 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1,15 +1,26 @@ @import 'tailwindcss'; -@import 'fumadocs-ui/css/black.css'; +@import 'fumadocs-ui/css/neutral.css'; @import 'fumadocs-ui/css/preset.css'; -@import '@fontsource/inter'; -@import '@fontsource-variable/jetbrains-mono'; +@import '@fontsource-variable/inter/wght.css'; +@import '@fontsource-variable/jetbrains-mono/wght.css'; @theme inline { - --font-sans: Inter, sans-serif; + --font-sans: 'Inter Variable', Inter, sans-serif; --font-mono: 'JetBrains Mono Variable', monospace; } +/* Brand accent — derived from the cube logo's blue. */ +@theme { + --color-brand: #2563eb; + --color-brand-hover: #1d4ed8; +} + +:root.dark { + --color-brand: #3b82f6; + --color-brand-hover: #60a5fa; +} + body { font-synthesis: style; text-rendering: optimizeLegibility; diff --git a/vite.config.ts b/vite.config.ts index 0376ffc..e0a60df 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,18 +1,63 @@ import { cloudflare } from '@cloudflare/vite-plugin'; +import { sentryVitePlugin } from '@sentry/vite-plugin'; import tailwindcss from '@tailwindcss/vite'; import { tanstackStart } from '@tanstack/react-start/plugin/vite'; import viteReact from '@vitejs/plugin-react'; import mdx from 'fumadocs-mdx/vite'; -import { defineConfig } from 'vite'; +import { createLogger, defineConfig } from 'vite'; import * as MdxConfig from './source.config'; -export default defineConfig({ +// Several dependencies (@tanstack/*, seroval) ship `//# sourceMappingURL` +// comments without the referenced `.map` files. The Cloudflare SSR environment +// bundles these packages (it can't externalize them for workerd), so Vite reads +// each file, sees the comment, and warns it cannot find the map. The warning is +// harmless, so filter out just that message while leaving every other log intact. +const logger = createLogger(); +const baseWarn = logger.warn.bind(logger); +logger.warn = (msg, options) => { + if (typeof msg === 'string' && msg.includes('Failed to load source map')) { + return; + } + baseWarn(msg, options); +}; + +export default defineConfig(({ command }) => ({ + customLogger: logger, server: { port: 3000, }, resolve: { tsconfigPaths: true, }, + build: { + sourcemap: 'hidden', + rolldownOptions: { + output: { + // Peel the large, rarely-changing vendor libraries out of the shared + // entry chunk. This keeps the app chunk small and lets browsers cache + // these dependencies separately across deploys. + codeSplitting: { + groups: [ + { + name: 'react', + test: /[\\/]node_modules[\\/](?:react|react-dom|scheduler)[\\/]/, + priority: 30, + }, + { + name: 'tanstack', + test: /[\\/]node_modules[\\/]@tanstack[\\/]/, + priority: 20, + }, + { + name: 'fumadocs', + test: /[\\/]node_modules[\\/]fumadocs-(?:ui|core|mdx)[\\/]/, + priority: 20, + }, + ], + }, + }, + }, + }, plugins: [ mdx(MdxConfig), tailwindcss(), @@ -23,5 +68,20 @@ export default defineConfig({ }), tanstackStart(), viteReact(), + // Upload source maps to Sentry on production builds only. + command === 'build' && + process.env.SENTRY_AUTH_TOKEN != null && + sentryVitePlugin({ + org: 'webview-bundle', + project: 'website', + authToken: process.env.SENTRY_AUTH_TOKEN, + sourcemaps: { + filesToDeleteAfterUpload: [ + './**/*.map', + '.*/**/public/**/*.map', + './dist/**/client/**/*.map', + ], + }, + }), ], -}); +})); diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts index a1cbcb1..9a4b7f3 100644 --- a/worker-configuration.d.ts +++ b/worker-configuration.d.ts @@ -1,11 +1,23 @@ /* eslint-disable */ -// Generated by Wrangler by running `wrangler types` (hash: 869ac3b4ce0f52ba3b2e0bc70c49089e) -// Runtime types generated with workerd@1.20260415.1 2026-04-19 nodejs_compat +// Generated by Wrangler by running `wrangler types` (hash: b2717314a3c16e1a74038855a3f3e140) +// Runtime types generated with workerd@1.20260521.1 2026-04-19 nodejs_compat +interface __BaseEnv_Env { + CF_ACCESS_TEAM_DOMAIN: string; + CF_ACCESS_AUD: string; +} declare namespace Cloudflare { - interface Env { + interface GlobalProps { + mainModule: typeof import("./src/server"); } + interface Env extends __BaseEnv_Env {} +} +interface Env extends __BaseEnv_Env {} +type StringifyValues> = { + [Binding in keyof EnvType]: EnvType[Binding] extends string ? EnvType[Binding] : string; +}; +declare namespace NodeJS { + interface ProcessEnv extends StringifyValues> {} } -interface Env extends Cloudflare.Env {} // Begin runtime types /*! ***************************************************************************** @@ -430,6 +442,7 @@ interface ExecutionContext { readonly exports: Cloudflare.Exports; readonly props: Props; cache?: CacheContext; + tracing?: Tracing; } type ExportedHandlerFetchHandler = (request: Request>, env: Env, ctx: ExecutionContext) => Response | Promise; type ExportedHandlerConnectHandler = (socket: Socket, env: Env, ctx: ExecutionContext) => void | Promise; @@ -457,6 +470,7 @@ declare abstract class Navigator { sendBeacon(url: string, body?: BodyInit): boolean; readonly userAgent: string; readonly hardwareConcurrency: number; + readonly platform: string; readonly language: string; readonly languages: string[]; } @@ -474,7 +488,6 @@ interface CachePurgeError { } interface CachePurgeResult { success: boolean; - zoneTag: string; errors: CachePurgeError[]; } interface CachePurgeOptions { @@ -911,7 +924,7 @@ interface CustomEventCustomEventInit { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob) */ declare class Blob { - constructor(type?: ((ArrayBuffer | ArrayBufferView) | string | Blob)[], options?: BlobOptions); + constructor(bits?: ((ArrayBuffer | ArrayBufferView) | string | Blob)[], options?: BlobOptions); /** * The **`size`** read-only property of the Blob interface returns the size of the Blob or File in bytes. * @@ -1907,8 +1920,31 @@ interface KVNamespaceGetWithMetadataResult { } type QueueContentType = "text" | "bytes" | "json" | "v8"; interface Queue { - send(message: Body, options?: QueueSendOptions): Promise; - sendBatch(messages: Iterable>, options?: QueueSendBatchOptions): Promise; + metrics(): Promise; + send(message: Body, options?: QueueSendOptions): Promise; + sendBatch(messages: Iterable>, options?: QueueSendBatchOptions): Promise; +} +interface QueueSendMetrics { + backlogCount: number; + backlogBytes: number; + oldestMessageTimestamp?: Date; +} +interface QueueSendMetadata { + metrics: QueueSendMetrics; +} +interface QueueSendResponse { + metadata: QueueSendMetadata; +} +interface QueueSendBatchMetrics { + backlogCount: number; + backlogBytes: number; + oldestMessageTimestamp?: Date; +} +interface QueueSendBatchMetadata { + metrics: QueueSendBatchMetrics; +} +interface QueueSendBatchResponse { + metadata: QueueSendBatchMetadata; } interface QueueSendOptions { contentType?: QueueContentType; @@ -1922,6 +1958,19 @@ interface MessageSendRequest { contentType?: QueueContentType; delaySeconds?: number; } +interface QueueMetrics { + backlogCount: number; + backlogBytes: number; + oldestMessageTimestamp?: Date; +} +interface MessageBatchMetrics { + backlogCount: number; + backlogBytes: number; + oldestMessageTimestamp?: Date; +} +interface MessageBatchMetadata { + metrics: MessageBatchMetrics; +} interface QueueRetryOptions { delaySeconds?: number; } @@ -1936,12 +1985,14 @@ interface Message { interface QueueEvent extends ExtendableEvent { readonly messages: readonly Message[]; readonly queue: string; + readonly metadata: MessageBatchMetadata; retryAll(options?: QueueRetryOptions): void; ackAll(): void; } interface MessageBatch { readonly messages: readonly Message[]; readonly queue: string; + readonly metadata: MessageBatchMetadata; retryAll(options?: QueueRetryOptions): void; ackAll(): void; } @@ -1960,7 +2011,7 @@ interface R2ListOptions { startAfter?: string; include?: ("httpMetadata" | "customMetadata")[]; } -declare abstract class R2Bucket { +interface R2Bucket { head(key: string): Promise; get(key: string, options: R2GetOptions & { onlyIf: R2Conditional | Headers; @@ -3432,78 +3483,144 @@ declare abstract class Performance { */ toJSON(): object; } +interface Tracing { + enterSpan(name: string, callback: (span: Span, ...args: A) => T, ...args: A): T; + Span: typeof Span; +} +declare abstract class Span { + get isTraced(): boolean; + setAttribute(key: string, value?: (boolean | number | string)): void; +} // ============ AI Search Error Interfaces ============ interface AiSearchInternalError extends Error { } interface AiSearchNotFoundError extends Error { } -// ============ AI Search Request Types ============ -type AiSearchSearchRequest = { - messages: Array<{ - role: 'system' | 'developer' | 'user' | 'assistant' | 'tool'; - content: string | null; - }>; - ai_search_options?: { - retrieval?: { - retrieval_type?: 'vector' | 'keyword' | 'hybrid'; - /** Match threshold (0-1, default 0.4) */ - match_threshold?: number; - /** Maximum number of results (1-50, default 10) */ - max_num_results?: number; - filters?: VectorizeVectorMetadataFilter; - /** Context expansion (0-3, default 0) */ - context_expansion?: number; - [key: string]: unknown; - }; - query_rewrite?: { - enabled?: boolean; - model?: string; - rewrite_prompt?: string; - [key: string]: unknown; - }; - reranking?: { - enabled?: boolean; - model?: '@cf/baai/bge-reranker-base' | string; - /** Match threshold (0-1, default 0.4) */ - match_threshold?: number; - [key: string]: unknown; - }; +// ============ AI Search Common Types ============ +/** A single message in a conversation-style search or chat request. */ +type AiSearchMessage = { + role: 'system' | 'developer' | 'user' | 'assistant' | 'tool'; + content: string | null; +}; +/** + * Common shape for `ai_search_options` used by both single-instance and multi-instance requests. + * Contains retrieval, query rewrite, reranking, and cache sub-options. + */ +type AiSearchOptions = { + retrieval?: { + /** Which retrieval backend to use. Defaults to the instance's configured index_method. */ + retrieval_type?: 'vector' | 'keyword' | 'hybrid'; + /** Fusion method for combining vector + keyword results. */ + fusion_method?: 'max' | 'rrf'; + /** How keyword terms are combined: "and" = all terms must match, "or" = any term matches. */ + keyword_match_mode?: 'and' | 'or'; + /** Minimum similarity score (0-1) for a result to be included. Default 0.4. */ + match_threshold?: number; + /** Maximum number of results to return (1-50). Default 10. */ + max_num_results?: number; + /** Vectorize metadata filters applied to the search. */ + filters?: VectorizeVectorMetadataFilter; + /** Number of surrounding chunks to include for context (0-3). Default 0. */ + context_expansion?: number; + /** If true, return only item metadata without chunk text. */ + metadata_only?: boolean; + /** If true (default), return empty results on retrieval failure instead of throwing. */ + return_on_failure?: boolean; + /** Boost results by metadata field values. Max 3 entries. */ + boost_by?: Array<{ + field: string; + direction?: 'asc' | 'desc' | 'exists' | 'not_exists'; + }>; [key: string]: unknown; }; + query_rewrite?: { + enabled?: boolean; + model?: string; + rewrite_prompt?: string; + [key: string]: unknown; + }; + reranking?: { + enabled?: boolean; + model?: string; + /** Match threshold (0-1, default 0.4) */ + match_threshold?: number; + [key: string]: unknown; + }; + cache?: { + enabled?: boolean; + cache_threshold?: 'super_strict_match' | 'close_enough' | 'flexible_friend' | 'anything_goes'; + }; + [key: string]: unknown; +}; +// ============ AI Search Request Types ============ +/** + * Request body for single-instance search. + * Exactly one of `query` or `messages` must be provided. + */ +type AiSearchSearchRequest = { + /** Simple query string. */ + query: string; + messages?: never; + ai_search_options?: AiSearchOptions; +} | { + query?: never; + /** Conversation-style input. At least one user message with non-empty content is required. */ + messages: AiSearchMessage[]; + ai_search_options?: AiSearchOptions; }; type AiSearchChatCompletionsRequest = { - messages: Array<{ - role: 'system' | 'developer' | 'user' | 'assistant' | 'tool'; - content: string | null; - [key: string]: unknown; - }>; + messages: AiSearchMessage[]; model?: string; stream?: boolean; - ai_search_options?: { - retrieval?: { - retrieval_type?: 'vector' | 'keyword' | 'hybrid'; - match_threshold?: number; - max_num_results?: number; - filters?: VectorizeVectorMetadataFilter; - context_expansion?: number; - [key: string]: unknown; - }; - query_rewrite?: { - enabled?: boolean; - model?: string; - rewrite_prompt?: string; - [key: string]: unknown; - }; - reranking?: { - enabled?: boolean; - model?: '@cf/baai/bge-reranker-base' | string; - match_threshold?: number; - [key: string]: unknown; - }; - [key: string]: unknown; - }; + ai_search_options?: AiSearchOptions; [key: string]: unknown; }; +// ============ AI Search Multi-Instance Types (Namespace-Scoped) ============ +/** `ai_search_options` shape for multi-instance requests — requires `instance_ids`. */ +type AiSearchMultiSearchOptions = AiSearchOptions & { + /** Instance IDs to search across (1-10). */ + instance_ids: string[]; +}; +/** + * Request for searching across multiple instances within a namespace. + * `ai_search_options` is required and must include `instance_ids`. + * Exactly one of `query` or `messages` must be provided. + */ +type AiSearchMultiSearchRequest = { + /** Simple query string. */ + query: string; + messages?: never; + ai_search_options: AiSearchMultiSearchOptions; +} | { + query?: never; + /** Conversation-style input. */ + messages: AiSearchMessage[]; + ai_search_options: AiSearchMultiSearchOptions; +}; +/** A search result chunk tagged with the instance it originated from. */ +type AiSearchMultiSearchChunk = AiSearchSearchResponse['chunks'][number] & { + instance_id: string; +}; +/** Describes a per-instance error during a multi-instance operation. */ +type AiSearchMultiSearchError = { + instance_id: string; + message: string; +}; +/** Response from a multi-instance search, with chunks tagged by instance and optional partial-failure errors. */ +type AiSearchMultiSearchResponse = { + search_query: string; + chunks: AiSearchMultiSearchChunk[]; + errors?: AiSearchMultiSearchError[]; +}; +/** Request for chat completions across multiple instances within a namespace. `ai_search_options` is required and must include `instance_ids`. */ +type AiSearchMultiChatCompletionsRequest = Omit & { + ai_search_options: AiSearchMultiSearchOptions; +}; +/** Response from multi-instance chat completions, with chunks tagged by instance and optional partial-failure errors. */ +type AiSearchMultiChatCompletionsResponse = Omit & { + chunks: AiSearchMultiSearchChunk[]; + errors?: AiSearchMultiSearchError[]; +}; // ============ AI Search Response Types ============ type AiSearchSearchResponse = { search_query: string; @@ -3523,6 +3640,14 @@ type AiSearchSearchResponse = { keyword_score?: number; /** Vector similarity score (0-1) */ vector_score?: number; + /** Keyword rank position */ + keyword_rank?: number; + /** Vector rank position */ + vector_rank?: number; + /** Reranking model score */ + reranking_score?: number; + /** Fusion method used to combine results */ + fusion_method?: 'rrf' | 'max'; [key: string]: unknown; }; }>; @@ -3551,19 +3676,84 @@ type AiSearchStatsResponse = { skipped?: number; outdated?: number; last_activity?: string; + /** Storage engine statistics. */ + engine?: { + vectorize?: { + vectorsCount: number; + dimensions: number; + }; + r2?: { + payloadSizeBytes: number; + metadataSizeBytes: number; + objectCount: number; + }; + }; }; // ============ AI Search Instance Info Types ============ type AiSearchInstanceInfo = { id: string; type?: 'r2' | 'web-crawler' | string; source?: string; + source_params?: unknown; paused?: boolean; status?: string; namespace?: string; created_at?: string; modified_at?: string; + token_id?: string; + ai_gateway_id?: string; + rewrite_query?: boolean; + reranking?: boolean; + embedding_model?: string; + ai_search_model?: string; + rewrite_model?: string; + reranking_model?: string; + /** @deprecated Use index_method instead. */ + hybrid_search_enabled?: boolean; + /** Controls which storage backends are active. */ + index_method?: { + vector?: boolean; + keyword?: boolean; + }; + /** Fusion method for combining vector and keyword results. */ + fusion_method?: 'max' | 'rrf'; + indexing_options?: { + keyword_tokenizer?: 'porter' | 'trigram'; + } | null; + retrieval_options?: { + keyword_match_mode?: 'and' | 'or'; + boost_by?: Array<{ + field: string; + direction?: 'asc' | 'desc' | 'exists' | 'not_exists'; + }>; + } | null; + chunk?: boolean; + chunk_size?: number; + chunk_overlap?: number; + score_threshold?: number; + max_num_results?: number; + cache?: boolean; + cache_threshold?: 'super_strict_match' | 'close_enough' | 'flexible_friend' | 'anything_goes'; + custom_metadata?: Array<{ + field_name: string; + data_type: 'text' | 'number' | 'boolean' | 'datetime'; + }>; + /** Sync interval in seconds. */ + sync_interval?: 3600 | 7200 | 14400 | 21600 | 43200 | 86400; + metadata?: Record; [key: string]: unknown; }; +/** Pagination, search, and ordering parameters for listing instances within a namespace. */ +type AiSearchListInstancesParams = { + page?: number; + per_page?: number; + /** Search instances by ID. */ + search?: string; + /** Field to sort by. */ + order_by?: 'created_at'; + /** Sort direction. */ + order_by_direction?: 'asc' | 'desc'; +}; type AiSearchListResponse = { result: AiSearchInstanceInfo[]; result_info?: { @@ -3591,13 +3781,60 @@ type AiSearchConfig = { reranking?: boolean; embedding_model?: string; ai_search_model?: string; + rewrite_model?: string; + reranking_model?: string; + /** @deprecated Use index_method instead. */ + hybrid_search_enabled?: boolean; + /** Controls which storage backends are used during indexing. Defaults to vector-only. */ + index_method?: { + vector?: boolean; + keyword?: boolean; + }; + /** Fusion method for combining vector and keyword results. "rrf" = reciprocal rank fusion (default), "max" = maximum score. */ + fusion_method?: 'max' | 'rrf'; + indexing_options?: { + keyword_tokenizer?: 'porter' | 'trigram'; + } | null; + retrieval_options?: { + keyword_match_mode?: 'and' | 'or'; + boost_by?: Array<{ + field: string; + direction?: 'asc' | 'desc' | 'exists' | 'not_exists'; + }>; + } | null; + chunk?: boolean; + chunk_size?: number; + chunk_overlap?: number; + /** Minimum similarity score (0-1) for a result to be included. */ + score_threshold?: number; + max_num_results?: number; + cache?: boolean; + /** Similarity threshold for cache hits. Stricter = fewer cache hits but higher relevance. */ + cache_threshold?: 'super_strict_match' | 'close_enough' | 'flexible_friend' | 'anything_goes'; + custom_metadata?: Array<{ + field_name: string; + data_type: 'text' | 'number' | 'boolean' | 'datetime'; + }>; + namespace?: string; + /** Sync interval in seconds. 3600=1h, 7200=2h, 14400=4h, 21600=6h, 43200=12h, 86400=24h. */ + sync_interval?: 3600 | 7200 | 14400 | 21600 | 43200 | 86400; + metadata?: Record; [key: string]: unknown; }; // ============ AI Search Item Types ============ type AiSearchItemInfo = { id: string; key: string; - status: 'completed' | 'error' | 'skipped' | 'queued' | 'processing' | 'outdated'; + status: 'completed' | 'error' | 'skipped' | 'queued' | 'running' | 'outdated'; + next_action?: 'INDEX' | 'DELETE' | null; + error?: string; + checksum?: string; + namespace?: string; + chunks_count?: number | null; + file_size?: number | null; + source_id?: string | null; + last_seen_at?: string; + created_at?: string; metadata?: Record; [key: string]: unknown; }; @@ -3613,6 +3850,16 @@ type AiSearchUploadItemOptions = { type AiSearchListItemsParams = { page?: number; per_page?: number; + /** Search items by key name. */ + search?: string; + /** Sort order for results. */ + sort_by?: 'status' | 'modified_at'; + /** Filter items by processing status. */ + status?: 'queued' | 'running' | 'completed' | 'error' | 'skipped' | 'outdated'; + /** Filter items by source (e.g. "builtin" or "web-crawler:https://example.com"). */ + source?: string; + /** JSON-encoded Vectorize filter for metadata filtering. */ + metadata_filter?: string; }; type AiSearchListItemsResponse = { result: AiSearchItemInfo[]; @@ -3623,6 +3870,61 @@ type AiSearchListItemsResponse = { total_count: number; }; }; +// ============ AI Search Item Logs Types ============ +type AiSearchItemLogsParams = { + /** Maximum number of log entries to return (1-100, default 50). */ + limit?: number; + /** Opaque cursor for pagination. Pass the `cursor` value from a previous response. */ + cursor?: string; +}; +type AiSearchItemLog = { + timestamp: string; + action: string; + message: string; + fileKey?: string; + chunkCount?: number; + processingTimeMs?: number; + errorType?: string; +}; +/** Paginated response for item processing logs (cursor-based). */ +type AiSearchItemLogsResponse = { + result: AiSearchItemLog[]; + result_info: { + count: number; + per_page: number; + cursor: string | null; + truncated: boolean; + }; +}; +// ============ AI Search Item Chunks Types ============ +type AiSearchItemChunksParams = { + /** Maximum number of chunks to return (1-100, default 20). */ + limit?: number; + /** Offset into the chunks list (default 0). */ + offset?: number; +}; +/** A single indexed chunk belonging to an item, including its text content and byte range. */ +type AiSearchItemChunk = { + id: string; + text: string; + start_byte: number; + end_byte: number; + item?: { + timestamp?: number; + key: string; + metadata?: Record; + }; +}; +/** Paginated response for item chunks (offset-based). */ +type AiSearchItemChunksResponse = { + result: AiSearchItemChunk[]; + result_info: { + count: number; + total: number; + limit: number; + offset: number; + }; +}; // ============ AI Search Job Types ============ type AiSearchJobInfo = { id: string; @@ -3671,7 +3973,7 @@ type AiSearchJobLogsResponse = { // ============ AI Search Sub-Service Classes ============ /** * Single item service for an AI Search instance. - * Provides info, delete, and download operations on a specific item. + * Provides info, download, sync, logs, and chunks operations on a specific item. */ declare abstract class AiSearchItem { /** Get metadata about this item. */ @@ -3681,6 +3983,23 @@ declare abstract class AiSearchItem { * @returns Object with body stream, content type, filename, and size. */ download(): Promise; + /** + * Trigger re-indexing of this item. + * @returns The updated item info. + */ + sync(): Promise; + /** + * Retrieve processing logs for this item (cursor-based pagination). + * @param params Optional pagination parameters (limit, cursor). + * @returns Paginated log entries for this item. + */ + logs(params?: AiSearchItemLogsParams): Promise; + /** + * List indexed chunks for this item (offset-based pagination). + * @param params Optional pagination parameters (limit, offset). + * @returns Paginated chunk entries for this item. + */ + chunks(params?: AiSearchItemChunksParams): Promise; } /** * Items collection service for an AI Search instance. @@ -3690,41 +4009,56 @@ declare abstract class AiSearchItems { /** List items in this instance. */ list(params?: AiSearchListItemsParams): Promise; /** - * Upload a file as an item. + * Upload a file as an item. Behaves as an upsert: if an item with the same + * filename already exists, it is overwritten and re-indexed. * @param name Filename for the uploaded item. - * @param content File content as a ReadableStream, ArrayBuffer, or string. + * @param content File content as a ReadableStream, Blob, or string. * @param options Optional metadata to attach to the item. * @returns The created item info. */ - upload(name: string, content: ReadableStream | ArrayBuffer | string, options?: AiSearchUploadItemOptions): Promise; + upload(name: string, content: ReadableStream | Blob | string, options?: AiSearchUploadItemOptions): Promise; /** * Upload a file and poll until processing completes. + * Behaves as an upsert: if an item with the same filename already exists, + * it is overwritten and re-indexed. * @param name Filename for the uploaded item. - * @param content File content as a ReadableStream, ArrayBuffer, or string. - * @param options Optional metadata to attach to the item. + * @param content File content as a ReadableStream, Blob, or string. + * @param options Optional metadata and polling configuration. * @returns The item info after processing completes (or timeout). */ - uploadAndPoll(name: string, content: ReadableStream | ArrayBuffer | string, options?: AiSearchUploadItemOptions): Promise; + uploadAndPoll(name: string, content: ReadableStream | Blob | string, options?: AiSearchUploadItemOptions & { + /** Polling interval in milliseconds (default 1000). */ + pollIntervalMs?: number; + /** Maximum time to wait in milliseconds (default 30000). */ + timeoutMs?: number; + }): Promise; /** * Get an item by ID. * @param itemId The item identifier. - * @returns Item service for info, delete, and download operations. + * @returns Item service for info, download, sync, logs, and chunks operations. */ get(itemId: string): AiSearchItem; - /** Delete this item from the instance. + /** + * Delete an item from the instance. * @param itemId The item identifier. */ delete(itemId: string): Promise; } /** * Single job service for an AI Search instance. - * Provides info and logs for a specific job. + * Provides info, logs, and cancel operations for a specific job. */ declare abstract class AiSearchJob { /** Get metadata about this job. */ info(): Promise; /** Get logs for this job. */ logs(params?: AiSearchJobLogsParams): Promise; + /** + * Cancel a running job. + * @returns The updated job info. + * @throws AiSearchNotFoundError if the job does not exist. + */ + cancel(): Promise; } /** * Jobs collection service for an AI Search instance. @@ -3742,7 +4076,7 @@ declare abstract class AiSearchJobs { /** * Get a job by ID. * @param jobId The job identifier. - * @returns Job service for info and logs operations. + * @returns Job service for info, logs, and cancel operations. */ get(jobId: string): AiSearchJob; } @@ -3761,7 +4095,7 @@ declare abstract class AiSearchJobs { * // Via namespace binding * const instance = env.AI_SEARCH.get("blog"); * const results = await instance.search({ - * messages: [{ role: "user", content: "How does caching work?" }], + * query: "How does caching work?", * }); * * // Via single instance binding @@ -3773,7 +4107,7 @@ declare abstract class AiSearchJobs { declare abstract class AiSearchInstance { /** * Search the AI Search instance for relevant chunks. - * @param params Search request with messages and optional AI search options. + * @param params Search request with query or messages and optional AI search options. * @returns Search response with matching chunks and search query. */ search(params: AiSearchSearchRequest): Promise; @@ -3801,7 +4135,7 @@ declare abstract class AiSearchInstance { info(): Promise; /** * Get instance statistics (item count, indexing status, etc.). - * @returns Statistics with counts per status and last activity time. + * @returns Statistics with counts per status, last activity time, and engine details. */ stats(): Promise; /** Items collection — list, upload, and manage items in this instance. */ @@ -3813,27 +4147,30 @@ declare abstract class AiSearchInstance { * Namespace-level AI Search service. * * Used as the type of `env.AI_SEARCH` (namespace binding via `ai_search_namespaces`). - * Scoped to a single namespace. Provides dynamic instance access, creation, and deletion. + * Scoped to a single namespace. Provides dynamic instance access, creation, deletion, + * and multi-instance search/chat operations. * * @example * ```ts * // Access an instance within the namespace * const blog = env.AI_SEARCH.get("blog"); - * const results = await blog.search({ - * messages: [{ role: "user", content: "How does caching work?" }], - * }); + * const results = await blog.search({ query: "How does caching work?" }); * * // List all instances in the namespace * const instances = await env.AI_SEARCH.list(); * * // Create a new instance with built-in storage - * const tenant = await env.AI_SEARCH.create({ - * id: "tenant-123", - * }); + * const tenant = await env.AI_SEARCH.create({ id: "tenant-123" }); * * // Upload items into the instance * await tenant.items.upload("doc.pdf", fileContent); * + * // Search across multiple instances + * const multi = await env.AI_SEARCH.search({ + * query: "caching", + * ai_search_options: { instance_ids: ["blog", "docs"] }, + * }); + * * // Delete an instance * await env.AI_SEARCH.delete("tenant-123"); * ``` @@ -3846,10 +4183,11 @@ declare abstract class AiSearchNamespace { */ get(name: string): AiSearchInstance; /** - * List all instances in the bound namespace. - * @returns Array of instance metadata. + * List instances in the bound namespace. + * @param params Optional pagination, search, and ordering parameters. + * @returns Array of instance metadata with pagination info. */ - list(): Promise; + list(params?: AiSearchListInstancesParams): Promise; /** * Create a new instance within the bound namespace. * @param config Instance configuration. Only `id` is required — omit `type` and `source` to create with built-in storage. @@ -3874,6 +4212,29 @@ declare abstract class AiSearchNamespace { * @param name Instance name to delete. */ delete(name: string): Promise; + /** + * Search across multiple instances within the bound namespace. + * Fans out to the specified instance_ids and merges results. + * @param params Search request with required `ai_search_options.instance_ids`. + * @returns Search response with chunks tagged by instance_id and optional partial-failure errors. + */ + search(params: AiSearchMultiSearchRequest): Promise; + /** + * Generate chat completions across multiple instances within the bound namespace (streaming). + * Fans out to the specified instance_ids, merges context, and generates a response. + * @param params Chat completions request with stream: true and required `ai_search_options.instance_ids`. + * @returns ReadableStream of server-sent events. + */ + chatCompletions(params: AiSearchMultiChatCompletionsRequest & { + stream: true; + }): Promise; + /** + * Generate chat completions across multiple instances within the bound namespace. + * Fans out to the specified instance_ids, merges context, and generates a response. + * @param params Chat completions request with required `ai_search_options.instance_ids`. + * @returns Chat completion response with choices, chunks tagged by instance_id, and optional partial-failure errors. + */ + chatCompletions(params: AiSearchMultiChatCompletionsRequest): Promise; } type AiImageClassificationInput = { image: number[]; @@ -9688,6 +10049,225 @@ declare abstract class AiGateway { }): Promise; getUrl(provider?: AIGatewayProviders | string): Promise; // eslint-disable-line } +// Copyright (c) 2022-2025 Cloudflare, Inc. +// Licensed under the Apache 2.0 license found in the LICENSE file or at: +// https://opensource.org/licenses/Apache-2.0 +/** + * Artifacts — Git-compatible file storage on Cloudflare Workers. + * + * Provides programmatic access to create, manage, and fork repositories, + * and to issue and revoke scoped access tokens. + */ +/** Information about a repository. */ +interface ArtifactsRepoInfo { + /** Unique repository ID. */ + id: string; + /** Repository name. */ + name: string; + /** Repository description, or null if not set. */ + description: string | null; + /** Default branch name (e.g. "main"). */ + defaultBranch: string; + /** ISO 8601 creation timestamp. */ + createdAt: string; + /** ISO 8601 last-updated timestamp. */ + updatedAt: string; + /** ISO 8601 timestamp of the last push, or null if never pushed. */ + lastPushAt: string | null; + /** Fork source (e.g. "github:owner/repo", "artifacts:namespace/repo"), or null if not a fork. */ + source: string | null; + /** Whether the repository is read-only. */ + readOnly: boolean; + /** HTTPS git remote URL. */ + remote: string; +} +/** Result of creating a repository — includes the initial access token. */ +interface ArtifactsCreateRepoResult { + /** Unique repository ID. */ + id: string; + /** Repository name. */ + name: string; + /** Repository description, or null if not set. */ + description: string | null; + /** Default branch name. */ + defaultBranch: string; + /** HTTPS git remote URL. */ + remote: string; + /** Plaintext access token (only returned at creation time). */ + token: string; + /** ISO 8601 token expiry timestamp. */ + tokenExpiresAt: string; +} +/** Paginated list of repositories. */ +interface ArtifactsRepoListResult { + /** Repositories in this page (without the `remote` field). */ + repos: Omit[]; + /** Total number of repositories in the namespace. */ + total: number; + /** Cursor for the next page, if there are more results. */ + cursor?: string; +} +/** Result of creating an access token. */ +interface ArtifactsCreateTokenResult { + /** Unique token ID. */ + id: string; + /** Plaintext token (only returned at creation time). */ + plaintext: string; + /** Token scope: "read" or "write". */ + scope: 'read' | 'write'; + /** ISO 8601 token expiry timestamp. */ + expiresAt: string; +} +/** Token metadata (no plaintext). */ +interface ArtifactsTokenInfo { + /** Unique token ID. */ + id: string; + /** Token scope: "read" or "write". */ + scope: 'read' | 'write'; + /** Token state: "active", "expired", or "revoked". */ + state: 'active' | 'expired' | 'revoked'; + /** ISO 8601 creation timestamp. */ + createdAt: string; + /** ISO 8601 expiry timestamp. */ + expiresAt: string; +} +/** Paginated list of tokens for a repository. */ +interface ArtifactsTokenListResult { + /** Tokens in this page. */ + tokens: ArtifactsTokenInfo[]; + /** Total number of tokens for the repository. */ + total: number; +} +/** + * Handle for a single repository. Returned by Artifacts.get(). + * + * Methods may throw `ArtifactsError` with code `INTERNAL_ERROR` if an unexpected service error occurs. + */ +interface ArtifactsRepo extends ArtifactsRepoInfo { + /** + * Create an access token for this repo. + * @param scope Token scope: "write" (default) or "read". + * @param ttl Time-to-live in seconds (default 86400, min 60, max 31536000). + * @throws {ArtifactsError} with code `INVALID_TTL` if ttl is out of range. + */ + createToken(scope?: 'write' | 'read', ttl?: number): Promise; + /** List tokens for this repo (metadata only, no plaintext). */ + listTokens(): Promise; + /** + * Revoke a token by plaintext or ID. + * @param tokenOrId Plaintext token or token ID. + * @returns true if revoked, false if not found. + * @throws {ArtifactsError} with code `INVALID_INPUT` if tokenOrId is empty. + */ + revokeToken(tokenOrId: string): Promise; + // ── Fork ── + /** + * Fork this repo to a new repo. + * @param name Target repository name. + * @param opts Optional: description, readOnly flag, defaultBranchOnly (default true). + * @throws {ArtifactsError} with code `INVALID_REPO_NAME` if name is invalid. + * @throws {ArtifactsError} with code `ALREADY_EXISTS` if the target repo already exists. + * @throws {ArtifactsError} with code `FORK_IN_PROGRESS` if a fork is already running. + */ + fork(name: string, opts?: { + description?: string; + readOnly?: boolean; + defaultBranchOnly?: boolean; + }): Promise; +} +// ── Error types ────────────────────────────────────────────────────────────── +/** + * Error codes returned by Artifacts binding operations. + * + * Each code maps to a numeric code available on `ArtifactsError.numericCode`. + */ +type ArtifactsErrorCode = 'ALREADY_EXISTS' | 'NOT_FOUND' | 'IMPORT_IN_PROGRESS' | 'FORK_IN_PROGRESS' | 'INVALID_INPUT' | 'INVALID_REPO_NAME' | 'INVALID_TTL' | 'INVALID_URL' | 'REMOTE_AUTH_REQUIRED' | 'UPSTREAM_UNAVAILABLE' | 'MEMORY_LIMIT' | 'INTERNAL_ERROR'; +/** + * Error thrown by Artifacts binding operations. + * + * Uses a string `.code` discriminator following the Cloudflare platform + * convention (StreamError, ImagesError, etc.). The `.numericCode` matches + * the REST API `errors[].code` values. + */ +interface ArtifactsError extends Error { + readonly name: 'ArtifactsError'; + /** String error code for programmatic matching. */ + readonly code: ArtifactsErrorCode; + /** Numeric error code matching the REST API. */ + readonly numericCode: number; +} +// ── Binding ────────────────────────────────────────────────────────────────── +/** + * Artifacts binding — namespace-level operations. + * + * Methods may throw `ArtifactsError` with code `INTERNAL_ERROR` if an unexpected service error occurs. + */ +interface Artifacts { + /** + * Create a new repository with an initial access token. + * @param name Repository name (alphanumeric, dots, hyphens, underscores). + * @param opts Optional: readOnly flag, description, default branch name. + * @returns Repo metadata with initial token. + * @throws {ArtifactsError} with code `INVALID_REPO_NAME` if name is invalid. + * @throws {ArtifactsError} with code `ALREADY_EXISTS` if the repo already exists. + */ + create(name: string, opts?: { + readOnly?: boolean; + description?: string; + setDefaultBranch?: string; + }): Promise; + /** + * Get a handle to an existing repository. + * @param name Repository name. + * @returns Repo handle. + * @throws {ArtifactsError} with code `NOT_FOUND` if the repo does not exist. + * @throws {ArtifactsError} with code `IMPORT_IN_PROGRESS` if the repo is still importing. + * @throws {ArtifactsError} with code `FORK_IN_PROGRESS` if the repo is still forking. + */ + get(name: string): Promise; + /** + * Import a repository from an external git remote. + * @param params Source URL and optional branch/depth, plus target name and options. + * @returns Repo metadata with initial token. + * @throws {ArtifactsError} with code `INVALID_REPO_NAME` if the target name is invalid. + * @throws {ArtifactsError} with code `INVALID_INPUT` if the source URL is not valid HTTPS. + * @throws {ArtifactsError} with code `INVALID_URL` if the source URL does not point to a git repository. + * @throws {ArtifactsError} with code `REMOTE_AUTH_REQUIRED` if the remote requires authentication. + * @throws {ArtifactsError} with code `NOT_FOUND` if the remote repository does not exist. + * @throws {ArtifactsError} with code `UPSTREAM_UNAVAILABLE` if the remote cannot be reached. + * @throws {ArtifactsError} with code `MEMORY_LIMIT` if the import exceeds service memory limits. + * @throws {ArtifactsError} with code `ALREADY_EXISTS` if the target repo already exists. + */ + import(params: { + source: { + url: string; + branch?: string; + depth?: number; + }; + target: { + name: string; + opts?: { + description?: string; + readOnly?: boolean; + }; + }; + }): Promise; + /** + * List repositories with cursor-based pagination. + * @param opts Optional: limit (1–200, default 50), cursor for next page. + */ + list(opts?: { + limit?: number; + cursor?: string; + }): Promise; + /** + * Delete a repository and all associated tokens. + * @param name Repository name. + * @returns true if deleted, false if not found. + * @throws {ArtifactsError} with code `INVALID_REPO_NAME` if name is invalid. + */ + delete(name: string): Promise; +} /** * @deprecated Use the standalone AI Search Workers binding instead. * See https://developers.cloudflare.com/ai-search/usage/workers-binding/ @@ -10784,11 +11364,11 @@ interface SendEmail { send(message: EmailMessage): Promise; send(builder: { from: string | EmailAddress; - to: string | string[]; + to: string | EmailAddress | (string | EmailAddress)[]; subject: string; replyTo?: string | EmailAddress; - cc?: string | string[]; - bcc?: string | string[]; + cc?: string | EmailAddress | (string | EmailAddress)[]; + bcc?: string | EmailAddress | (string | EmailAddress)[]; headers?: Record; text?: string; html?: string; @@ -10810,8 +11390,8 @@ declare module "cloudflare:email" { * Evaluation context for targeting rules. * Keys are attribute names (e.g. "userId", "country"), values are the attribute values. */ -type EvaluationContext = Record; -interface EvaluationDetails { +type FlagshipEvaluationContext = Record; +interface FlagshipEvaluationDetails { flagKey: string; value: T; variant?: string | undefined; @@ -10819,7 +11399,7 @@ interface EvaluationDetails { errorCode?: string | undefined; errorMessage?: string | undefined; } -interface FlagEvaluationError extends Error { +interface FlagshipEvaluationError extends Error { } /** * Feature flags binding for evaluating feature flags from a Cloudflare Workers script. @@ -10840,70 +11420,70 @@ interface FlagEvaluationError extends Error { * console.log(details.variant, details.reason); * ``` */ -declare abstract class Flags { +declare abstract class Flagship { /** * Get a flag value without type checking. * @param flagKey The key of the flag to evaluate. * @param defaultValue Optional default value returned when evaluation fails. * @param context Optional evaluation context for targeting rules. */ - get(flagKey: string, defaultValue?: unknown, context?: EvaluationContext): Promise; + get(flagKey: string, defaultValue?: unknown, context?: FlagshipEvaluationContext): Promise; /** * Get a boolean flag value. * @param flagKey The key of the flag to evaluate. * @param defaultValue Default value returned when evaluation fails or the flag type does not match. * @param context Optional evaluation context for targeting rules. */ - getBooleanValue(flagKey: string, defaultValue: boolean, context?: EvaluationContext): Promise; + getBooleanValue(flagKey: string, defaultValue: boolean, context?: FlagshipEvaluationContext): Promise; /** * Get a string flag value. * @param flagKey The key of the flag to evaluate. * @param defaultValue Default value returned when evaluation fails or the flag type does not match. * @param context Optional evaluation context for targeting rules. */ - getStringValue(flagKey: string, defaultValue: string, context?: EvaluationContext): Promise; + getStringValue(flagKey: string, defaultValue: string, context?: FlagshipEvaluationContext): Promise; /** * Get a number flag value. * @param flagKey The key of the flag to evaluate. * @param defaultValue Default value returned when evaluation fails or the flag type does not match. * @param context Optional evaluation context for targeting rules. */ - getNumberValue(flagKey: string, defaultValue: number, context?: EvaluationContext): Promise; + getNumberValue(flagKey: string, defaultValue: number, context?: FlagshipEvaluationContext): Promise; /** * Get an object flag value. * @param flagKey The key of the flag to evaluate. * @param defaultValue Default value returned when evaluation fails or the flag type does not match. * @param context Optional evaluation context for targeting rules. */ - getObjectValue(flagKey: string, defaultValue: T, context?: EvaluationContext): Promise; + getObjectValue(flagKey: string, defaultValue: T, context?: FlagshipEvaluationContext): Promise; /** * Get a boolean flag value with full evaluation details. * @param flagKey The key of the flag to evaluate. * @param defaultValue Default value returned when evaluation fails or the flag type does not match. * @param context Optional evaluation context for targeting rules. */ - getBooleanDetails(flagKey: string, defaultValue: boolean, context?: EvaluationContext): Promise>; + getBooleanDetails(flagKey: string, defaultValue: boolean, context?: FlagshipEvaluationContext): Promise>; /** * Get a string flag value with full evaluation details. * @param flagKey The key of the flag to evaluate. * @param defaultValue Default value returned when evaluation fails or the flag type does not match. * @param context Optional evaluation context for targeting rules. */ - getStringDetails(flagKey: string, defaultValue: string, context?: EvaluationContext): Promise>; + getStringDetails(flagKey: string, defaultValue: string, context?: FlagshipEvaluationContext): Promise>; /** * Get a number flag value with full evaluation details. * @param flagKey The key of the flag to evaluate. * @param defaultValue Default value returned when evaluation fails or the flag type does not match. * @param context Optional evaluation context for targeting rules. */ - getNumberDetails(flagKey: string, defaultValue: number, context?: EvaluationContext): Promise>; + getNumberDetails(flagKey: string, defaultValue: number, context?: FlagshipEvaluationContext): Promise>; /** * Get an object flag value with full evaluation details. * @param flagKey The key of the flag to evaluate. * @param defaultValue Default value returned when evaluation fails or the flag type does not match. * @param context Optional evaluation context for targeting rules. */ - getObjectDetails(flagKey: string, defaultValue: T, context?: EvaluationContext): Promise>; + getObjectDetails(flagKey: string, defaultValue: T, context?: FlagshipEvaluationContext): Promise>; } /** * Hello World binding to serve as an explanatory example. DO NOT USE @@ -11623,7 +12203,12 @@ declare namespace CloudflareWorkersModule { type: string; }; export type WorkflowStepContext = { + step: { + name: string; + count: number; + }; attempt: number; + config: WorkflowStepConfig; }; export abstract class WorkflowStep { do>(name: string, callback: (ctx: WorkflowStepContext) => Promise): Promise; @@ -11649,6 +12234,8 @@ declare namespace CloudflareWorkersModule { export function withEnvAndExports(newEnv: unknown, newExports: unknown, fn: () => unknown): unknown; export const env: Cloudflare.Env; export const exports: Cloudflare.Exports; + export const cache: CacheContext; + export const tracing: Tracing; } declare module 'cloudflare:workers' { export = CloudflareWorkersModule; @@ -12516,7 +13103,7 @@ declare namespace TailStream { interface ConnectEventInfo { readonly type: "connect"; } - type EventOutcome = "ok" | "canceled" | "exception" | "unknown" | "killSwitch" | "daemonDown" | "exceededCpu" | "exceededMemory" | "loadShed" | "responseStreamDisconnected" | "scriptNotFound"; + type EventOutcome = "ok" | "canceled" | "exception" | "unknown" | "killSwitch" | "daemonDown" | "exceededCpu" | "exceededMemory" | "loadShed" | "responseStreamDisconnected" | "scriptNotFound" | "internalError"; interface ScriptVersion { readonly id: string; readonly tag?: string; @@ -12615,6 +13202,9 @@ declare namespace TailStream { // 1. This is an Onset event // 2. We are not inheriting any SpanContext. (e.g. this is a cross-account service binding or a new top-level invocation) readonly spanId?: string; + // W3C trace flags from an upstream traceparent. Absent when no upstream + // sampling decision was made. + readonly traceFlags?: number; } interface TailEvent { // invocation id of the currently invoked worker stage. @@ -12989,6 +13579,27 @@ interface WorkflowError { code?: number; message: string; } +interface WorkflowInstanceRestartOptions { + /** + * Restart from a specific step. If omitted, the instance restarts from the beginning. + * The step must exist in the instance's execution history. + */ + from?: { + /** + * The step name as defined in your workflow code. + */ + name: string; + /** + * 1-indexed occurrence of this step name. Use when the same step name appears multiple times (e.g. in a loop). + * @default 1 + */ + count?: number; + /** + * Step type filter. Use when different step types share the same name. + */ + type?: 'do' | 'sleep' | 'waitForEvent'; + }; +} declare abstract class WorkflowInstance { public id: string; /** @@ -13004,9 +13615,11 @@ declare abstract class WorkflowInstance { */ public terminate(): Promise; /** - * Restart the instance. + * Restart the instance. Optionally restart from a specific step, preserving + * cached results for all steps before it. + * @param options Options for the restart, including an optional step to restart from. */ - public restart(): Promise; + public restart(options?: WorkflowInstanceRestartOptions): Promise; /** * Returns the current status of the instance. */ diff --git a/wrangler.jsonc b/wrangler.jsonc index b8a2507..82e3556 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -3,7 +3,7 @@ "name": "webview-bundle-website", "compatibility_date": "2026-04-19", "compatibility_flags": ["nodejs_compat"], - "main": "@tanstack/react-start/server-entry", + "main": "./src/server.ts", "observability": { "enabled": true } diff --git a/yarn.lock b/yarn.lock index f2202f6..1607949 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # Manual changes might be lost - proceed with caution! __metadata: - version: 9 + version: 10 cacheKey: 10c0 "@babel/code-frame@npm:7.27.1": @@ -34,7 +34,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.23.7, @babel/core@npm:^7.28.5": +"@babel/core@npm:^7.18.5, @babel/core@npm:^7.23.7, @babel/core@npm:^7.28.5": version: 7.29.0 resolution: "@babel/core@npm:7.29.0" dependencies: @@ -227,12 +227,12 @@ __metadata: languageName: node linkType: hard -"@base-ui/react@npm:1.4.0": - version: 1.4.0 - resolution: "@base-ui/react@npm:1.4.0" +"@base-ui/react@npm:1.5.0": + version: 1.5.0 + resolution: "@base-ui/react@npm:1.5.0" dependencies: "@babel/runtime": "npm:^7.29.2" - "@base-ui/utils": "npm:0.2.7" + "@base-ui/utils": "npm:0.2.9" "@floating-ui/react-dom": "npm:^2.1.8" "@floating-ui/utils": "npm:^0.2.11" use-sync-external-store: "npm:^1.6.0" @@ -243,15 +243,19 @@ __metadata: react: ^17 || ^18 || ^19 react-dom: ^17 || ^18 || ^19 peerDependenciesMeta: + "@date-fns/tz": + optional: true "@types/react": optional: true - checksum: 10c0/68e0be74cd3e5a7bea61d2ddfde2dbc04979d2396a81823392edab5d82f2333a68ba7ba78f429cf3a1c0a30f87aadddf59c601ecd6aa27d84211672989e09870 + date-fns: + optional: true + checksum: 10c0/ba0f00149d7500d39e0e790b4b6cf19c002f4281508b6076ed1e367ca9a4946eb345e98d4c0dd0ab8e1613807bdcac9d9ad07f6c6d19c3b243a022bb30cbb61b languageName: node linkType: hard -"@base-ui/utils@npm:0.2.7": - version: 0.2.7 - resolution: "@base-ui/utils@npm:0.2.7" +"@base-ui/utils@npm:0.2.9": + version: 0.2.9 + resolution: "@base-ui/utils@npm:0.2.9" dependencies: "@babel/runtime": "npm:^7.29.2" "@floating-ui/utils": "npm:^0.2.11" @@ -264,77 +268,77 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/d01336c52b0a1bad4d554a8599f5378d8f538f4562498594c60eb42e329f4faf6bc167dc7395f83e1bd80f933588eae86b42095ab97955888c00b7efe2e49655 + checksum: 10c0/169a67fb6a4d86d3ce9fb12bc1e8cb02a67ad3d16872c81798cd6a532c9277383c4066c88356a9813499a87b93b4bf255ea035ea3c6f7298c52adeb1e8e846ce languageName: node linkType: hard -"@cloudflare/kv-asset-handler@npm:0.4.2": - version: 0.4.2 - resolution: "@cloudflare/kv-asset-handler@npm:0.4.2" - checksum: 10c0/c8877851ce069b04d32d50a640c9c0faaab054970204f64a4111bac3dd85f177c001a0b57d32f7e65269e3896268b8f94605f31e4fa06253a6a5779587a63d17 +"@cloudflare/kv-asset-handler@npm:0.5.0": + version: 0.5.0 + resolution: "@cloudflare/kv-asset-handler@npm:0.5.0" + checksum: 10c0/46863066ff1628aa76946db6ecb5088ae64ba15d7bda7e4935bd1ab1dcf080cef9cd0920205c9508721153365ef1305984e3584e7ad2dd1c9454df984f441edb languageName: node linkType: hard -"@cloudflare/unenv-preset@npm:2.16.0": - version: 2.16.0 - resolution: "@cloudflare/unenv-preset@npm:2.16.0" +"@cloudflare/unenv-preset@npm:2.16.1": + version: 2.16.1 + resolution: "@cloudflare/unenv-preset@npm:2.16.1" peerDependencies: unenv: 2.0.0-rc.24 - workerd: 1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0 + workerd: ">1.20260305.0 <2.0.0-0" peerDependenciesMeta: workerd: optional: true - checksum: 10c0/ddb2939cd05b5a0cb17d44b98a11b5c8e24dc6fa31171e98d8f1d7ffbb9cd35fde2ad2873715dc90db63183d6768ea43256ce3e4eb8c359542a2051f2d8bd919 + checksum: 10c0/08c9bd9ef488a14fd5330eb2c0829fc221f97f12295f8263dc8e3a6816ebd1a629e7255a3619b8bb688f1f58deafe28042c4e90ea84c926438c768f235f82ad9 languageName: node linkType: hard -"@cloudflare/vite-plugin@npm:^1.32.3": - version: 1.32.3 - resolution: "@cloudflare/vite-plugin@npm:1.32.3" +"@cloudflare/vite-plugin@npm:1.38.0": + version: 1.38.0 + resolution: "@cloudflare/vite-plugin@npm:1.38.0" dependencies: - "@cloudflare/unenv-preset": "npm:2.16.0" - miniflare: "npm:4.20260415.0" + "@cloudflare/unenv-preset": "npm:2.16.1" + miniflare: "npm:4.20260521.0" unenv: "npm:2.0.0-rc.24" - wrangler: "npm:4.83.0" - ws: "npm:8.18.0" + wrangler: "npm:4.94.0" + ws: "npm:8.20.1" peerDependencies: vite: ^6.1.0 || ^7.0.0 || ^8.0.0 - wrangler: ^4.83.0 - checksum: 10c0/de06c3deaea7bdf438658571f45b608a2a784a10845b3a9af95f1032d827e77e38d8b785848a8847f768d4f7cb511bda2901ad5bd5a26e484906993feb332881 + wrangler: ^4.94.0 + checksum: 10c0/8e6ecda445bedbe3d50eaefcf9ae9a6b6d35a5f748eedb605fa1e64b86750c0049814758c297c6d328ece05370878a0baab38b72f0a5898233a57537b23c0040 languageName: node linkType: hard -"@cloudflare/workerd-darwin-64@npm:1.20260415.1": - version: 1.20260415.1 - resolution: "@cloudflare/workerd-darwin-64@npm:1.20260415.1" +"@cloudflare/workerd-darwin-64@npm:1.20260521.1": + version: 1.20260521.1 + resolution: "@cloudflare/workerd-darwin-64@npm:1.20260521.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@cloudflare/workerd-darwin-arm64@npm:1.20260415.1": - version: 1.20260415.1 - resolution: "@cloudflare/workerd-darwin-arm64@npm:1.20260415.1" +"@cloudflare/workerd-darwin-arm64@npm:1.20260521.1": + version: 1.20260521.1 + resolution: "@cloudflare/workerd-darwin-arm64@npm:1.20260521.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@cloudflare/workerd-linux-64@npm:1.20260415.1": - version: 1.20260415.1 - resolution: "@cloudflare/workerd-linux-64@npm:1.20260415.1" +"@cloudflare/workerd-linux-64@npm:1.20260521.1": + version: 1.20260521.1 + resolution: "@cloudflare/workerd-linux-64@npm:1.20260521.1" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@cloudflare/workerd-linux-arm64@npm:1.20260415.1": - version: 1.20260415.1 - resolution: "@cloudflare/workerd-linux-arm64@npm:1.20260415.1" +"@cloudflare/workerd-linux-arm64@npm:1.20260521.1": + version: 1.20260521.1 + resolution: "@cloudflare/workerd-linux-arm64@npm:1.20260521.1" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@cloudflare/workerd-windows-64@npm:1.20260415.1": - version: 1.20260415.1 - resolution: "@cloudflare/workerd-windows-64@npm:1.20260415.1" +"@cloudflare/workerd-windows-64@npm:1.20260521.1": + version: 1.20260521.1 + resolution: "@cloudflare/workerd-windows-64@npm:1.20260521.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -348,24 +352,14 @@ __metadata: languageName: node linkType: hard -"@date-fns/tz@npm:^1.4.1": - version: 1.4.1 - resolution: "@date-fns/tz@npm:1.4.1" - checksum: 10c0/9033fdc4682fe3d4d147625ce04fa88a8792653594e2de8d5a438c8f3bfc0990ee28fe773f91cac6810b06d818b5b281ae0608752ba8337257d0279ded3f019a +"@date-fns/tz@npm:1.5.0": + version: 1.5.0 + resolution: "@date-fns/tz@npm:1.5.0" + checksum: 10c0/4ef25eedd55924938fa81b23b949a3425201597e2007f5323db54d50fc19283eca5e2a7963c3d82c99b3adf273e9ea9bc7adfd1c9076e15badd99c593a984ffa languageName: node linkType: hard -"@emnapi/core@npm:1.9.2": - version: 1.9.2 - resolution: "@emnapi/core@npm:1.9.2" - dependencies: - "@emnapi/wasi-threads": "npm:1.2.1" - tslib: "npm:^2.4.0" - checksum: 10c0/5500393f953951bad0768fafaa9191f2d938956b20c6d6a79e5ab696a613a25ce6ad23422bc18e86e6ce8deb147619d8d0d7d413a69f84adc01a6633cc353cd9 - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.8.1": +"@emnapi/core@npm:1.10.0, @emnapi/core@npm:^1.10.0": version: 1.10.0 resolution: "@emnapi/core@npm:1.10.0" dependencies: @@ -375,16 +369,7 @@ __metadata: languageName: node linkType: hard -"@emnapi/runtime@npm:1.9.2": - version: 1.9.2 - resolution: "@emnapi/runtime@npm:1.9.2" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/61c3a59e0c36784558b8d58eb02bd04815aa5fb0dbfbaf84d1b3050a78aa0cc63ea129ae806bd1e48062bfeb7fc36eb0e5431740d62f64ea51bdf426404b8caa - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.7.0, @emnapi/runtime@npm:^1.8.1": +"@emnapi/runtime@npm:1.10.0, @emnapi/runtime@npm:^1.10.0, @emnapi/runtime@npm:^1.7.0": version: 1.10.0 resolution: "@emnapi/runtime@npm:1.10.0" dependencies: @@ -393,7 +378,7 @@ __metadata: languageName: node linkType: hard -"@emnapi/wasi-threads@npm:1.2.1, @emnapi/wasi-threads@npm:^1.1.0": +"@emnapi/wasi-threads@npm:1.2.1, @emnapi/wasi-threads@npm:^1.2.1": version: 1.2.1 resolution: "@emnapi/wasi-threads@npm:1.2.1" dependencies: @@ -409,13 +394,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/aix-ppc64@npm:0.27.7" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/aix-ppc64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/aix-ppc64@npm:0.28.0" @@ -430,13 +408,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-arm64@npm:0.27.7" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/android-arm64@npm:0.28.0" @@ -451,13 +422,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-arm@npm:0.27.7" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/android-arm@npm:0.28.0" @@ -472,13 +436,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-x64@npm:0.27.7" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "@esbuild/android-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/android-x64@npm:0.28.0" @@ -493,13 +450,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/darwin-arm64@npm:0.27.7" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/darwin-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/darwin-arm64@npm:0.28.0" @@ -514,13 +464,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/darwin-x64@npm:0.27.7" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@esbuild/darwin-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/darwin-x64@npm:0.28.0" @@ -535,13 +478,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/freebsd-arm64@npm:0.27.7" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/freebsd-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/freebsd-arm64@npm:0.28.0" @@ -556,13 +492,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/freebsd-x64@npm:0.27.7" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/freebsd-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/freebsd-x64@npm:0.28.0" @@ -577,13 +506,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-arm64@npm:0.27.7" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/linux-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-arm64@npm:0.28.0" @@ -598,13 +520,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-arm@npm:0.27.7" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@esbuild/linux-arm@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-arm@npm:0.28.0" @@ -619,13 +534,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-ia32@npm:0.27.7" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/linux-ia32@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-ia32@npm:0.28.0" @@ -640,13 +548,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-loong64@npm:0.27.7" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-loong64@npm:0.28.0" @@ -661,13 +562,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-mips64el@npm:0.27.7" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "@esbuild/linux-mips64el@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-mips64el@npm:0.28.0" @@ -682,13 +576,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-ppc64@npm:0.27.7" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/linux-ppc64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-ppc64@npm:0.28.0" @@ -703,13 +590,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-riscv64@npm:0.27.7" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "@esbuild/linux-riscv64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-riscv64@npm:0.28.0" @@ -724,13 +604,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-s390x@npm:0.27.7" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "@esbuild/linux-s390x@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-s390x@npm:0.28.0" @@ -745,13 +618,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-x64@npm:0.27.7" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@esbuild/linux-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-x64@npm:0.28.0" @@ -766,13 +632,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/netbsd-arm64@npm:0.27.7" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/netbsd-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/netbsd-arm64@npm:0.28.0" @@ -787,13 +646,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/netbsd-x64@npm:0.27.7" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/netbsd-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/netbsd-x64@npm:0.28.0" @@ -808,13 +660,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openbsd-arm64@npm:0.27.7" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/openbsd-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/openbsd-arm64@npm:0.28.0" @@ -829,13 +674,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openbsd-x64@npm:0.27.7" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/openbsd-x64@npm:0.28.0" @@ -850,13 +688,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openharmony-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openharmony-arm64@npm:0.27.7" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/openharmony-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/openharmony-arm64@npm:0.28.0" @@ -871,13 +702,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/sunos-x64@npm:0.27.7" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "@esbuild/sunos-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/sunos-x64@npm:0.28.0" @@ -892,13 +716,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-arm64@npm:0.27.7" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/win32-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/win32-arm64@npm:0.28.0" @@ -913,13 +730,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-ia32@npm:0.27.7" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/win32-ia32@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/win32-ia32@npm:0.28.0" @@ -934,13 +744,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-x64@npm:0.27.7" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@esbuild/win32-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/win32-x64@npm:0.28.0" @@ -948,6 +751,20 @@ __metadata: languageName: node linkType: hard +"@fastify/otel@npm:0.18.0": + version: 0.18.0 + resolution: "@fastify/otel@npm:0.18.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.212.0" + "@opentelemetry/semantic-conventions": "npm:^1.28.0" + minimatch: "npm:^10.2.4" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + checksum: 10c0/fe785b572538481a625c0bbf442e8a510de6c46ba9d72b8e97ca886c02c0c8d11b5fce4dcf11cfad76e881ea6ed9a2a36c6e0b5a17f69325e0eb220eb1bc62d4 + languageName: node + linkType: hard + "@floating-ui/core@npm:^1.7.5": version: 1.7.5 resolution: "@floating-ui/core@npm:1.7.5" @@ -986,17 +803,17 @@ __metadata: languageName: node linkType: hard -"@fontsource-variable/jetbrains-mono@npm:^5.2.8": +"@fontsource-variable/inter@npm:5.2.8": version: 5.2.8 - resolution: "@fontsource-variable/jetbrains-mono@npm:5.2.8" - checksum: 10c0/574e5463b802cfdd6ec8dd16724d2fd5ee38204815729c9dca0f457a417f0a4d32e6ec4ed2dfa0e5a5de5a9b0deaeb9f3c0b49b332763ed40172de43d6b1502f + resolution: "@fontsource-variable/inter@npm:5.2.8" + checksum: 10c0/35b46df31c8c18f55f87228acf6297e4dac6cc9f38d0faaafdaf5a40e40c386cf1bfb115fb0fe0dcdb9b7e14f582843693ccf070d9c903072a5b2fc0f8dfde56 languageName: node linkType: hard -"@fontsource/inter@npm:^5.2.8": +"@fontsource-variable/jetbrains-mono@npm:5.2.8": version: 5.2.8 - resolution: "@fontsource/inter@npm:5.2.8" - checksum: 10c0/f737dd50005e4809887ba55ae0c9b7174216d6d14875d17a4fbb9a0ad75dec4265928b805a43fe16a23f14a878f1974a398bbfc84ad65c79fc4d4b9c3ea154e1 + resolution: "@fontsource-variable/jetbrains-mono@npm:5.2.8" + checksum: 10c0/574e5463b802cfdd6ec8dd16724d2fd5ee38204815729c9dca0f457a417f0a4d32e6ec4ed2dfa0e5a5de5a9b0deaeb9f3c0b49b332763ed40172de43d6b1502f languageName: node linkType: hard @@ -1345,7 +1162,7 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^1.1.1, @napi-rs/wasm-runtime@npm:^1.1.3": +"@napi-rs/wasm-runtime@npm:^1.1.4": version: 1.1.4 resolution: "@napi-rs/wasm-runtime@npm:1.1.4" dependencies: @@ -1423,6 +1240,371 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.207.0": + version: 0.207.0 + resolution: "@opentelemetry/api-logs@npm:0.207.0" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10c0/daa5c8b8f7cd411d7e04c1ab09df408b9e663ea6c353cee32c31f8128125632c579efe727a72c3693af0c4fbbbbe8959d801bf53a0482b6225cf3798df359bdc + languageName: node + linkType: hard + +"@opentelemetry/api-logs@npm:0.212.0": + version: 0.212.0 + resolution: "@opentelemetry/api-logs@npm:0.212.0" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10c0/ffcc5cea3565f0f73ffe7cd4ef1fd5ed93f78bcbb695508af733e32a200b65c6f10084df9c616eaad44eb62e64c09675465b4c6ebea10fb125eea89753a183b7 + languageName: node + linkType: hard + +"@opentelemetry/api-logs@npm:0.214.0": + version: 0.214.0 + resolution: "@opentelemetry/api-logs@npm:0.214.0" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10c0/414f8b824ad52ad2cc358cc2f26b709e64b0748fd7c3e6b7a613cb3b3a1138adf6c0a80d92fad8832ab4b62bbf3e1d1424bf5c707efe2f49bfd15500031ccbf7 + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.9.1": + version: 1.9.1 + resolution: "@opentelemetry/api@npm:1.9.1" + checksum: 10c0/c608485fc8b5a91e1f7e05e843b45b509307456b31cd2ad365933d90813e40ebfedf179f1451c762037e82d7c76aa8500e95d2da3609f640a1206cde5322cd14 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:2.6.1": + version: 2.6.1 + resolution: "@opentelemetry/core@npm:2.6.1" + dependencies: + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/a144749e4fc4b8aa56a67310136ae37ba446cdd84a5286d76b441206e80362d5059e496b11373909d5ada8be32cfb00fcebc5a90401b29a08a3ce34c9caacbdd + languageName: node + linkType: hard + +"@opentelemetry/core@npm:2.7.1, @opentelemetry/core@npm:^2.0.0, @opentelemetry/core@npm:^2.6.1": + version: 2.7.1 + resolution: "@opentelemetry/core@npm:2.7.1" + dependencies: + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/a8ce7bb08f51cfce094b98febc63101ccbc00dddf845be600b059cd7877c48d88b111f46a4df94c9cfcc42f595200722caf230cdba080cdc8ab304cf664d00e5 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-amqplib@npm:0.61.0": + version: 0.61.0 + resolution: "@opentelemetry/instrumentation-amqplib@npm:0.61.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/40995a932f4920fec6a9c6483457ad9d70dcb5f2b2bb6fdfebafb27ac99d0ebbcef3d16f6322cfda06131bdc9b71ea0596f81570dc0a8600c9b38e410fa020cf + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-connect@npm:0.57.0": + version: 0.57.0 + resolution: "@opentelemetry/instrumentation-connect@npm:0.57.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/connect": "npm:3.4.38" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/a7516736b1850d33817901d0723986213cf608aab783820e671351605ee5e5dc9e9dc71b9067cc2f19dd6a0e15a70cc8d91f5312e751634f5f15e8cec64e55e3 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dataloader@npm:0.31.0": + version: 0.31.0 + resolution: "@opentelemetry/instrumentation-dataloader@npm:0.31.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/83ba2103e62556f771ea0fc2b615a6a241f8f2428dc31e16875a4950e3624f6ced0e806c603586a3330739ba6d78d1c6191372e931bbe3cfb3d9638c1bf77f1b + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fs@npm:0.33.0": + version: 0.33.0 + resolution: "@opentelemetry/instrumentation-fs@npm:0.33.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.214.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/29df43387530f63ff3af1f5c1052ce5d84de2d4d36bda7ebe50c79bc1e47eed89a2e90c2e27e0507297aab998ee17e3ee2567674956d5a87a1e68dc6c7bebe43 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-generic-pool@npm:0.57.0": + version: 0.57.0 + resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.57.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/fa2112f4e82d1cfe2b742b69af8cdec3a41fcb2c35281f4b45f6e4bc07e2fc1676952411e7d007c97b34c5b285af56fdf39b41050c719550421b31c0de53cb9b + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-graphql@npm:0.62.0": + version: 0.62.0 + resolution: "@opentelemetry/instrumentation-graphql@npm:0.62.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/62afed07bedc4e7157c7b68da45af74ee7d76bfdc6a0ec568a556dc57a51c627990a043be9adcc3a2c5ec983f17a9caa07839588883c49453a5fb345fd6b9e0a + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-hapi@npm:0.60.0": + version: 0.60.0 + resolution: "@opentelemetry/instrumentation-hapi@npm:0.60.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/c3b7292742fcbead6720685a03fea0cf7a629b7f3da6b90cac665494899a4adb0fcc2592a4f07989c79fb11a01b7fcc1e3062e2ffb74d25331d60a2c6dc73150 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-http@npm:0.214.0": + version: 0.214.0 + resolution: "@opentelemetry/instrumentation-http@npm:0.214.0" + dependencies: + "@opentelemetry/core": "npm:2.6.1" + "@opentelemetry/instrumentation": "npm:0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + forwarded-parse: "npm:2.1.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/035966fecbc4c94bac94d34e1840e3af4d23a3101214e0428e836fd6f479165a2ec43fe9a9ca7219986535a9031aafbb109075d6d8e1862329fe1817224580a9 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-kafkajs@npm:0.23.0": + version: 0.23.0 + resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.23.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.30.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/a260d6a7477b6431e7870ef099c65a3a43d0e1a8cdd2322e09165291f894edb5e6a215f41531d79dca29269d6f41ffc00582eca94aa8eda14ee2629b4f4143a9 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-knex@npm:0.58.0": + version: 0.58.0 + resolution: "@opentelemetry/instrumentation-knex@npm:0.58.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/f2317eebe06708c3be7a86ed02b0ebdd856bc23729cb5e06f8b1eba3a887623a000ec4e2eb5583598a5c546ee41ccac868a03dd6af0a86422e875b3bf15e71b1 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-koa@npm:0.62.0": + version: 0.62.0 + resolution: "@opentelemetry/instrumentation-koa@npm:0.62.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.36.0" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + checksum: 10c0/9fbb881a0273a0e200f2587bb5f7dd3a6697c3e773853baade1dd734231039221d882daa82b9277ed1ddfc918b75eda679d946c9d4210f07a77328b31a78df8c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-lru-memoizer@npm:0.58.0": + version: 0.58.0 + resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.58.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/3ff7c69302e17014cb44d1ce822aee3bb61528503c25eab4badc07aed977c069da83b0dd2478de522358fd31725182b5171ad958e63a06d4d2a0c6531c4576b9 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongodb@npm:0.67.0": + version: 0.67.0 + resolution: "@opentelemetry/instrumentation-mongodb@npm:0.67.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/2062028cb69fa9f19be7d3a76c5265a289fa913995d1f1062e422bf4d673498ba3423c6374615f0acaf1e112da9bff3a3090c5446e8a6a0193736fbd1e688ab1 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongoose@npm:0.60.0": + version: 0.60.0 + resolution: "@opentelemetry/instrumentation-mongoose@npm:0.60.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/aef3d88af79478f01ac9ac33f00243631fcf44fea5c9e288718afca3a502cc345d19f8cc0e18655554b1433193de06d275c1a831ecfb12ee0baf48b902e39d38 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql2@npm:0.60.0": + version: 0.60.0 + resolution: "@opentelemetry/instrumentation-mysql2@npm:0.60.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.0" + "@opentelemetry/sql-common": "npm:^0.41.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/643ce304fe7e78179efe3f114af6470a40e569ea0d34872e1dfab022e1e46cc517d24e5e795c5d98089af1ea616ef0097303e488db209f427bdca8175053ddfc + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql@npm:0.60.0": + version: 0.60.0 + resolution: "@opentelemetry/instrumentation-mysql@npm:0.60.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.0" + "@types/mysql": "npm:2.15.27" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/1d8515aa175a0a9c99ab0cc52bd9dda3913a93061a8fa72ae8e09a6bc11b53598c45271cb708a542368ebe4569eb8a5d0535b28ad3f9418effa1a6dc767d4c93 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pg@npm:0.66.0": + version: 0.66.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.66.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.34.0" + "@opentelemetry/sql-common": "npm:^0.41.2" + "@types/pg": "npm:8.15.6" + "@types/pg-pool": "npm:2.0.7" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/f18101526a072270d3867d855b968ef38bdced5dc8b2e33d8bc66169d3f30d30f111e3690a45210beffcc6ed16dde5f803f8b922a68717f810d749e0d40474a7 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-tedious@npm:0.33.0": + version: 0.33.0 + resolution: "@opentelemetry/instrumentation-tedious@npm:0.33.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.0" + "@types/tedious": "npm:^4.0.14" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/37d56893613c2a83bf0971b3b1b58c962cae6397eef475a5f6947b5729ce4a2595604a0728a573ac523f0eda5a7a04e82c5524fe679bfe4a0af9e9b8fabbafd0 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.214.0, @opentelemetry/instrumentation@npm:^0.214.0": + version: 0.214.0 + resolution: "@opentelemetry/instrumentation@npm:0.214.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.214.0" + import-in-the-middle: "npm:^3.0.0" + require-in-the-middle: "npm:^8.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/0b0bde772a28c134d8f27c078d9b4a368b64b3b2183ffe1eea3067944f3ee711b8ce820d50b55c59a6218bf5a04722ebf6f04c27850895a7faa423cb56c99653 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:^0.207.0": + version: 0.207.0 + resolution: "@opentelemetry/instrumentation@npm:0.207.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.207.0" + import-in-the-middle: "npm:^2.0.0" + require-in-the-middle: "npm:^8.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/1796e958f8bcf483f37a59c05a6876d13ee95528ac3b3f594928fbd030ad85d05b9804d6b7905b90c232965ddbce9bdc90efd15b751a0456a6252d631f8ebb3f + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:^0.212.0": + version: 0.212.0 + resolution: "@opentelemetry/instrumentation@npm:0.212.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.212.0" + import-in-the-middle: "npm:^2.0.6" + require-in-the-middle: "npm:^8.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/72fec530fbf2f3fa52bf0038fb2e4d1f92fee2901b8c28a817769c035b90699400c0ba397ad79af56869f6a282983bf7600aa14f370cd93aee8f418ba6ef40ba + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:2.7.1": + version: 2.7.1 + resolution: "@opentelemetry/resources@npm:2.7.1" + dependencies: + "@opentelemetry/core": "npm:2.7.1" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10c0/f752c432ff9aaaec818dc5b5dc69bb22881bf20e6f361c917fce3715d7839274aacf94d2fe06e765cabc5e08193f65bfc438917c19ddf17f21b30252d9ad81ae + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:^2.6.1": + version: 2.7.1 + resolution: "@opentelemetry/sdk-trace-base@npm:2.7.1" + dependencies: + "@opentelemetry/core": "npm:2.7.1" + "@opentelemetry/resources": "npm:2.7.1" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10c0/e33f46476a80ff58866ed29bdb687ed7a32e2d995664b96391c3bb8358c779792df0a1039503ae775464f55c8a1af3ae0e46319a482071bf4541a66da1c9b0ee + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.28.0, @opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.30.0, @opentelemetry/semantic-conventions@npm:^1.33.0, @opentelemetry/semantic-conventions@npm:^1.33.1, @opentelemetry/semantic-conventions@npm:^1.34.0, @opentelemetry/semantic-conventions@npm:^1.36.0, @opentelemetry/semantic-conventions@npm:^1.40.0": + version: 1.41.1 + resolution: "@opentelemetry/semantic-conventions@npm:1.41.1" + checksum: 10c0/c54b1edf845766e93026d30fd95e15da9dba8d7a5b58f8c320c5d36ab542c77b37868f3e8e3d78ec162da8ee2afd24781f0a65934c9bdbc1aea86b47b12f074c + languageName: node + linkType: hard + +"@opentelemetry/sql-common@npm:^0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/sql-common@npm:0.41.2" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: 10c0/1774930abdad57a716662a3feffe8a7aca8e4494303356f04c3e958fddcdb1df29d464ca91db890e0501728b4fb6c4b578f3ecb83004bcdc9d7e81b739d24459 + languageName: node + linkType: hard + "@orama/orama@npm:^3.1.18": version: 3.1.18 resolution: "@orama/orama@npm:3.1.18" @@ -1430,317 +1612,317 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:=0.124.0": - version: 0.124.0 - resolution: "@oxc-project/types@npm:0.124.0" - checksum: 10c0/9564ee3ce41f4b87802ffd0d62a7602d27f4503fbd39c1bedab98d54fde06e2ac254a8f85d8f679af1281a26e8fc7aa053fadbb3e09e786b38178eb38a8e2fb3 +"@oxc-project/types@npm:=0.132.0": + version: 0.132.0 + resolution: "@oxc-project/types@npm:0.132.0" + checksum: 10c0/d0ca5e98be0b873d69e4f0f743eb35026833603dac11db9d55f2b5438251b381b886dc556fe3175a17b673f8e2073c49bde88d7e6e702aa09298c22b8b5504e1 languageName: node linkType: hard -"@oxfmt/binding-android-arm-eabi@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-android-arm-eabi@npm:0.45.0" +"@oxfmt/binding-android-arm-eabi@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-android-arm-eabi@npm:0.51.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@oxfmt/binding-android-arm64@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-android-arm64@npm:0.45.0" +"@oxfmt/binding-android-arm64@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-android-arm64@npm:0.51.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@oxfmt/binding-darwin-arm64@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-darwin-arm64@npm:0.45.0" +"@oxfmt/binding-darwin-arm64@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-darwin-arm64@npm:0.51.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxfmt/binding-darwin-x64@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-darwin-x64@npm:0.45.0" +"@oxfmt/binding-darwin-x64@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-darwin-x64@npm:0.51.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxfmt/binding-freebsd-x64@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-freebsd-x64@npm:0.45.0" +"@oxfmt/binding-freebsd-x64@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-freebsd-x64@npm:0.51.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@oxfmt/binding-linux-arm-gnueabihf@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-arm-gnueabihf@npm:0.45.0" +"@oxfmt/binding-linux-arm-gnueabihf@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-arm-gnueabihf@npm:0.51.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxfmt/binding-linux-arm-musleabihf@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-arm-musleabihf@npm:0.45.0" +"@oxfmt/binding-linux-arm-musleabihf@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-arm-musleabihf@npm:0.51.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxfmt/binding-linux-arm64-gnu@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-arm64-gnu@npm:0.45.0" +"@oxfmt/binding-linux-arm64-gnu@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-arm64-gnu@npm:0.51.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-arm64-musl@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-arm64-musl@npm:0.45.0" +"@oxfmt/binding-linux-arm64-musl@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-arm64-musl@npm:0.51.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@oxfmt/binding-linux-ppc64-gnu@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-ppc64-gnu@npm:0.45.0" +"@oxfmt/binding-linux-ppc64-gnu@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-ppc64-gnu@npm:0.51.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-riscv64-gnu@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-riscv64-gnu@npm:0.45.0" +"@oxfmt/binding-linux-riscv64-gnu@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-riscv64-gnu@npm:0.51.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-riscv64-musl@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-riscv64-musl@npm:0.45.0" +"@oxfmt/binding-linux-riscv64-musl@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-riscv64-musl@npm:0.51.0" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@oxfmt/binding-linux-s390x-gnu@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-s390x-gnu@npm:0.45.0" +"@oxfmt/binding-linux-s390x-gnu@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-s390x-gnu@npm:0.51.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-x64-gnu@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-x64-gnu@npm:0.45.0" +"@oxfmt/binding-linux-x64-gnu@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-x64-gnu@npm:0.51.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@oxfmt/binding-linux-x64-musl@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-linux-x64-musl@npm:0.45.0" +"@oxfmt/binding-linux-x64-musl@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-linux-x64-musl@npm:0.51.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@oxfmt/binding-openharmony-arm64@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-openharmony-arm64@npm:0.45.0" +"@oxfmt/binding-openharmony-arm64@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-openharmony-arm64@npm:0.51.0" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@oxfmt/binding-win32-arm64-msvc@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-win32-arm64-msvc@npm:0.45.0" +"@oxfmt/binding-win32-arm64-msvc@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-win32-arm64-msvc@npm:0.51.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxfmt/binding-win32-ia32-msvc@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-win32-ia32-msvc@npm:0.45.0" +"@oxfmt/binding-win32-ia32-msvc@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-win32-ia32-msvc@npm:0.51.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@oxfmt/binding-win32-x64-msvc@npm:0.45.0": - version: 0.45.0 - resolution: "@oxfmt/binding-win32-x64-msvc@npm:0.45.0" +"@oxfmt/binding-win32-x64-msvc@npm:0.51.0": + version: 0.51.0 + resolution: "@oxfmt/binding-win32-x64-msvc@npm:0.51.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@oxlint-tsgolint/darwin-arm64@npm:0.21.1": - version: 0.21.1 - resolution: "@oxlint-tsgolint/darwin-arm64@npm:0.21.1" +"@oxlint-tsgolint/darwin-arm64@npm:0.23.0": + version: 0.23.0 + resolution: "@oxlint-tsgolint/darwin-arm64@npm:0.23.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxlint-tsgolint/darwin-x64@npm:0.21.1": - version: 0.21.1 - resolution: "@oxlint-tsgolint/darwin-x64@npm:0.21.1" +"@oxlint-tsgolint/darwin-x64@npm:0.23.0": + version: 0.23.0 + resolution: "@oxlint-tsgolint/darwin-x64@npm:0.23.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxlint-tsgolint/linux-arm64@npm:0.21.1": - version: 0.21.1 - resolution: "@oxlint-tsgolint/linux-arm64@npm:0.21.1" +"@oxlint-tsgolint/linux-arm64@npm:0.23.0": + version: 0.23.0 + resolution: "@oxlint-tsgolint/linux-arm64@npm:0.23.0" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@oxlint-tsgolint/linux-x64@npm:0.21.1": - version: 0.21.1 - resolution: "@oxlint-tsgolint/linux-x64@npm:0.21.1" +"@oxlint-tsgolint/linux-x64@npm:0.23.0": + version: 0.23.0 + resolution: "@oxlint-tsgolint/linux-x64@npm:0.23.0" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@oxlint-tsgolint/win32-arm64@npm:0.21.1": - version: 0.21.1 - resolution: "@oxlint-tsgolint/win32-arm64@npm:0.21.1" +"@oxlint-tsgolint/win32-arm64@npm:0.23.0": + version: 0.23.0 + resolution: "@oxlint-tsgolint/win32-arm64@npm:0.23.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxlint-tsgolint/win32-x64@npm:0.21.1": - version: 0.21.1 - resolution: "@oxlint-tsgolint/win32-x64@npm:0.21.1" +"@oxlint-tsgolint/win32-x64@npm:0.23.0": + version: 0.23.0 + resolution: "@oxlint-tsgolint/win32-x64@npm:0.23.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@oxlint/binding-android-arm-eabi@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-android-arm-eabi@npm:1.60.0" +"@oxlint/binding-android-arm-eabi@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-android-arm-eabi@npm:1.66.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@oxlint/binding-android-arm64@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-android-arm64@npm:1.60.0" +"@oxlint/binding-android-arm64@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-android-arm64@npm:1.66.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@oxlint/binding-darwin-arm64@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-darwin-arm64@npm:1.60.0" +"@oxlint/binding-darwin-arm64@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-darwin-arm64@npm:1.66.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxlint/binding-darwin-x64@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-darwin-x64@npm:1.60.0" +"@oxlint/binding-darwin-x64@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-darwin-x64@npm:1.66.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxlint/binding-freebsd-x64@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-freebsd-x64@npm:1.60.0" +"@oxlint/binding-freebsd-x64@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-freebsd-x64@npm:1.66.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@oxlint/binding-linux-arm-gnueabihf@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-arm-gnueabihf@npm:1.60.0" +"@oxlint/binding-linux-arm-gnueabihf@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-arm-gnueabihf@npm:1.66.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxlint/binding-linux-arm-musleabihf@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-arm-musleabihf@npm:1.60.0" +"@oxlint/binding-linux-arm-musleabihf@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-arm-musleabihf@npm:1.66.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxlint/binding-linux-arm64-gnu@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-arm64-gnu@npm:1.60.0" +"@oxlint/binding-linux-arm64-gnu@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-arm64-gnu@npm:1.66.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-arm64-musl@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-arm64-musl@npm:1.60.0" +"@oxlint/binding-linux-arm64-musl@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-arm64-musl@npm:1.66.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@oxlint/binding-linux-ppc64-gnu@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-ppc64-gnu@npm:1.60.0" +"@oxlint/binding-linux-ppc64-gnu@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-ppc64-gnu@npm:1.66.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-riscv64-gnu@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-riscv64-gnu@npm:1.60.0" +"@oxlint/binding-linux-riscv64-gnu@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-riscv64-gnu@npm:1.66.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-riscv64-musl@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-riscv64-musl@npm:1.60.0" +"@oxlint/binding-linux-riscv64-musl@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-riscv64-musl@npm:1.66.0" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@oxlint/binding-linux-s390x-gnu@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-s390x-gnu@npm:1.60.0" +"@oxlint/binding-linux-s390x-gnu@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-s390x-gnu@npm:1.66.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-x64-gnu@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-x64-gnu@npm:1.60.0" +"@oxlint/binding-linux-x64-gnu@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-x64-gnu@npm:1.66.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-x64-musl@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-linux-x64-musl@npm:1.60.0" +"@oxlint/binding-linux-x64-musl@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-linux-x64-musl@npm:1.66.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@oxlint/binding-openharmony-arm64@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-openharmony-arm64@npm:1.60.0" +"@oxlint/binding-openharmony-arm64@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-openharmony-arm64@npm:1.66.0" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@oxlint/binding-win32-arm64-msvc@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-win32-arm64-msvc@npm:1.60.0" +"@oxlint/binding-win32-arm64-msvc@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-win32-arm64-msvc@npm:1.66.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxlint/binding-win32-ia32-msvc@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-win32-ia32-msvc@npm:1.60.0" +"@oxlint/binding-win32-ia32-msvc@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-win32-ia32-msvc@npm:1.66.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@oxlint/binding-win32-x64-msvc@npm:1.60.0": - version: 1.60.0 - resolution: "@oxlint/binding-win32-x64-msvc@npm:1.60.0" +"@oxlint/binding-win32-x64-msvc@npm:1.66.0": + version: 1.66.0 + resolution: "@oxlint/binding-win32-x64-msvc@npm:1.66.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1772,6 +1954,17 @@ __metadata: languageName: node linkType: hard +"@prisma/instrumentation@npm:7.6.0": + version: 7.6.0 + resolution: "@prisma/instrumentation@npm:7.6.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.207.0" + peerDependencies: + "@opentelemetry/api": ^1.8 + checksum: 10c0/ed505510164e3be0abf5476f178bef534e7011934e694df16256ee3fc046a64268afe3af8f04f3fd2795d0040ed43a4c81d39b2e859885338b750f6eff4c1f3b + languageName: node + linkType: hard + "@radix-ui/number@npm:1.1.1": version: 1.1.1 resolution: "@radix-ui/number@npm:1.1.1" @@ -2400,159 +2593,470 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-visually-hidden@npm:1.2.3": - version: 1.2.3 - resolution: "@radix-ui/react-visually-hidden@npm:1.2.3" +"@radix-ui/react-visually-hidden@npm:1.2.3": + version: 1.2.3 + resolution: "@radix-ui/react-visually-hidden@npm:1.2.3" + dependencies: + "@radix-ui/react-primitive": "npm: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 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/cf86a37f1cbee50a964056f3dc4f6bb1ee79c76daa321f913aa20ff3e1ccdfafbf2b114d7bb616aeefc7c4b895e6ca898523fdb67710d89bd5d8edb739a0d9b6 + languageName: node + linkType: hard + +"@radix-ui/rect@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/rect@npm:1.1.1" + checksum: 10c0/0dac4f0f15691199abe6a0e067821ddd9d0349c0c05f39834e4eafc8403caf724106884035ae91bbc826e10367e6a5672e7bec4d4243860fa7649de246b1f60b + languageName: node + linkType: hard + +"@rolldown/binding-android-arm64@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-android-arm64@npm:1.0.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-arm64@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-ppc64-gnu@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.2" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-s390x-gnu@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-openharmony-arm64@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.2" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.2" + dependencies: + "@emnapi/core": "npm:1.10.0" + "@emnapi/runtime": "npm:1.10.0" + "@napi-rs/wasm-runtime": "npm:^1.1.4" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rolldown/binding-win32-arm64-msvc@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.2": + version: 1.0.2 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/pluginutils@npm:1.0.1, @rolldown/pluginutils@npm:^1.0.0": + version: 1.0.1 + resolution: "@rolldown/pluginutils@npm:1.0.1" + checksum: 10c0/99d9b06d90196823e4d8c841f258db7a16e5dbba5824a2962b05d907b79f1ba929d56f22dd744fd530936e568c865ee56a719dc31e57e13bc0a8eb4764a8d8dd + languageName: node + linkType: hard + +"@sentry-internal/browser-utils@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry-internal/browser-utils@npm:10.53.1" + dependencies: + "@sentry/core": "npm:10.53.1" + checksum: 10c0/8aac8ac84b55faebc889add2749a930301a3024be1cae1f522950988c9752caf588723362d8015bf2e2ed1ee4206b161c71ae3298a53e4103e583f51f296bf67 + languageName: node + linkType: hard + +"@sentry-internal/feedback@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry-internal/feedback@npm:10.53.1" + dependencies: + "@sentry/core": "npm:10.53.1" + checksum: 10c0/7e9d79301412513643755efcfb5e4a9acd0ca4e643accb0f280cff5b66d5146313303928122dd13a4f6fd855bb6e2824e4659c5cb484eabf78bdf3ba00eca39c + languageName: node + linkType: hard + +"@sentry-internal/replay-canvas@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry-internal/replay-canvas@npm:10.53.1" + dependencies: + "@sentry-internal/replay": "npm:10.53.1" + "@sentry/core": "npm:10.53.1" + checksum: 10c0/641e07249ea5d6bbd9d955f8fd03e825912285d559ca2ac7321795dfc79c056d72513314a647f7ce2543917631b84d7bc8f4daee29c29e04870c517b6c681425 + languageName: node + linkType: hard + +"@sentry-internal/replay@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry-internal/replay@npm:10.53.1" + dependencies: + "@sentry-internal/browser-utils": "npm:10.53.1" + "@sentry/core": "npm:10.53.1" + checksum: 10c0/ae9d5d4f6ba52b67d5f8fc93147c625955bd4261d3d2e5ece83e77ffbe351d907bca81b3292a5ab898036dfbc614408682a9e6f1a16e484c6f35f188a7ba23bb + languageName: node + linkType: hard + +"@sentry/babel-plugin-component-annotate@npm:5.3.0": + version: 5.3.0 + resolution: "@sentry/babel-plugin-component-annotate@npm:5.3.0" + checksum: 10c0/744ef0fdc71fb30210ddabcdd665a2b69985b5e85fd12a65c456e0cb6286f5df71e304918058d285bc7fcb794792da91541cc290dc1f738aa406a6a40472e456 + languageName: node + linkType: hard + +"@sentry/browser@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry/browser@npm:10.53.1" dependencies: - "@radix-ui/react-primitive": "npm: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 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/cf86a37f1cbee50a964056f3dc4f6bb1ee79c76daa321f913aa20ff3e1ccdfafbf2b114d7bb616aeefc7c4b895e6ca898523fdb67710d89bd5d8edb739a0d9b6 + "@sentry-internal/browser-utils": "npm:10.53.1" + "@sentry-internal/feedback": "npm:10.53.1" + "@sentry-internal/replay": "npm:10.53.1" + "@sentry-internal/replay-canvas": "npm:10.53.1" + "@sentry/core": "npm:10.53.1" + checksum: 10c0/00feb12629940a639871ca6de7a624cd25fb4560947f6bbbbecaa14ade2cbc9b073c154de8a10bd7f3146c2087f56f787797fd23587979c01de4f9a6b384b479 languageName: node linkType: hard -"@radix-ui/rect@npm:1.1.1": - version: 1.1.1 - resolution: "@radix-ui/rect@npm:1.1.1" - checksum: 10c0/0dac4f0f15691199abe6a0e067821ddd9d0349c0c05f39834e4eafc8403caf724106884035ae91bbc826e10367e6a5672e7bec4d4243860fa7649de246b1f60b +"@sentry/bundler-plugin-core@npm:5.3.0": + version: 5.3.0 + resolution: "@sentry/bundler-plugin-core@npm:5.3.0" + dependencies: + "@babel/core": "npm:^7.18.5" + "@sentry/babel-plugin-component-annotate": "npm:5.3.0" + "@sentry/cli": "npm:^2.58.5" + dotenv: "npm:^16.3.1" + find-up: "npm:^5.0.0" + glob: "npm:^13.0.6" + magic-string: "npm:~0.30.8" + checksum: 10c0/7eb681a6da7bb13d1217c76caef4000a1158c597c40a5f1f5bb2a8d4884cfb83df7bab960ee7eececf00f1950c9e276f361f82299c94b9c4c4b910abf931f9d5 languageName: node linkType: hard -"@rolldown/binding-android-arm64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.15" - conditions: os=android & cpu=arm64 +"@sentry/cli-darwin@npm:2.58.6": + version: 2.58.6 + resolution: "@sentry/cli-darwin@npm:2.58.6" + conditions: os=darwin languageName: node linkType: hard -"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.15" - conditions: os=darwin & cpu=arm64 +"@sentry/cli-linux-arm64@npm:2.58.6": + version: 2.58.6 + resolution: "@sentry/cli-linux-arm64@npm:2.58.6" + conditions: (os=linux | os=freebsd | os=android) & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-x64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.15" - conditions: os=darwin & cpu=x64 +"@sentry/cli-linux-arm@npm:2.58.6": + version: 2.58.6 + resolution: "@sentry/cli-linux-arm@npm:2.58.6" + conditions: (os=linux | os=freebsd | os=android) & cpu=arm languageName: node linkType: hard -"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.15" - conditions: os=freebsd & cpu=x64 +"@sentry/cli-linux-i686@npm:2.58.6": + version: 2.58.6 + resolution: "@sentry/cli-linux-i686@npm:2.58.6" + conditions: (os=linux | os=freebsd | os=android) & (cpu=x86 | cpu=ia32) languageName: node linkType: hard -"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.15" - conditions: os=linux & cpu=arm +"@sentry/cli-linux-x64@npm:2.58.6": + version: 2.58.6 + resolution: "@sentry/cli-linux-x64@npm:2.58.6" + conditions: (os=linux | os=freebsd | os=android) & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.15" - conditions: os=linux & cpu=arm64 & libc=glibc +"@sentry/cli-win32-arm64@npm:2.58.6": + version: 2.58.6 + resolution: "@sentry/cli-win32-arm64@npm:2.58.6" + conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.15" - conditions: os=linux & cpu=arm64 & libc=musl +"@sentry/cli-win32-i686@npm:2.58.6": + version: 2.58.6 + resolution: "@sentry/cli-win32-i686@npm:2.58.6" + conditions: os=win32 & (cpu=x86 | cpu=ia32) languageName: node linkType: hard -"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.15" - conditions: os=linux & cpu=ppc64 & libc=glibc +"@sentry/cli-win32-x64@npm:2.58.6": + version: 2.58.6 + resolution: "@sentry/cli-win32-x64@npm:2.58.6" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.15" - conditions: os=linux & cpu=s390x & libc=glibc +"@sentry/cli@npm:^2.58.5": + version: 2.58.6 + resolution: "@sentry/cli@npm:2.58.6" + dependencies: + "@sentry/cli-darwin": "npm:2.58.6" + "@sentry/cli-linux-arm": "npm:2.58.6" + "@sentry/cli-linux-arm64": "npm:2.58.6" + "@sentry/cli-linux-i686": "npm:2.58.6" + "@sentry/cli-linux-x64": "npm:2.58.6" + "@sentry/cli-win32-arm64": "npm:2.58.6" + "@sentry/cli-win32-i686": "npm:2.58.6" + "@sentry/cli-win32-x64": "npm:2.58.6" + https-proxy-agent: "npm:^5.0.0" + node-fetch: "npm:^2.6.7" + progress: "npm:^2.0.3" + proxy-from-env: "npm:^1.1.0" + which: "npm:^2.0.2" + dependenciesMeta: + "@sentry/cli-darwin": + optional: true + "@sentry/cli-linux-arm": + optional: true + "@sentry/cli-linux-arm64": + optional: true + "@sentry/cli-linux-i686": + optional: true + "@sentry/cli-linux-x64": + optional: true + "@sentry/cli-win32-arm64": + optional: true + "@sentry/cli-win32-i686": + optional: true + "@sentry/cli-win32-x64": + optional: true + bin: + sentry-cli: bin/sentry-cli + checksum: 10c0/3037c8c03d0b56114d4bdccc409a88b2e48df3544b2ddd800556a70d45b72e889e1dc5fc1a2997d962f9d047e360d30e5090d8f454078c9d7be1545ad32e7c0c languageName: node linkType: hard -"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.15" - conditions: os=linux & cpu=x64 & libc=glibc +"@sentry/cloudflare@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry/cloudflare@npm:10.53.1" + dependencies: + "@opentelemetry/api": "npm:^1.9.1" + "@sentry/core": "npm:10.53.1" + peerDependencies: + "@cloudflare/workers-types": ^4.x + peerDependenciesMeta: + "@cloudflare/workers-types": + optional: true + checksum: 10c0/107360ee8e9c066f8e0364216f45cc4696719f6bcb8a0a31f499937a7032dfc395c41091a05e60798a5606266d9e8714e30112cf93943caa483a68b75963d375 languageName: node linkType: hard -"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.15" - conditions: os=linux & cpu=x64 & libc=musl +"@sentry/core@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry/core@npm:10.53.1" + checksum: 10c0/70f258becfa974c8f8888d0f1328c879f22dbfb360870292e75995c2fe2bf169cdc217f042bd1e6c6d6f974506151513566df39b5265403354178cb17624a5ae languageName: node linkType: hard -"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.15" - conditions: os=openharmony & cpu=arm64 +"@sentry/node-core@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry/node-core@npm:10.53.1" + dependencies: + "@sentry/core": "npm:10.53.1" + "@sentry/opentelemetry": "npm:10.53.1" + import-in-the-middle: "npm:^3.0.0" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + "@opentelemetry/core": ^1.30.1 || ^2.1.0 + "@opentelemetry/exporter-trace-otlp-http": ">=0.57.0 <1" + "@opentelemetry/instrumentation": ">=0.57.1 <1" + "@opentelemetry/sdk-trace-base": ^1.30.1 || ^2.1.0 + "@opentelemetry/semantic-conventions": ^1.39.0 + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + "@opentelemetry/core": + optional: true + "@opentelemetry/exporter-trace-otlp-http": + optional: true + "@opentelemetry/instrumentation": + optional: true + "@opentelemetry/sdk-trace-base": + optional: true + "@opentelemetry/semantic-conventions": + optional: true + checksum: 10c0/9cfc6cbfed166ef7de6e9104f079abf60feeadd51d38e8ecc8363409449464e413a2815a0646b078cd331a7250596aa6ba88ae572251b07fab6548822b03a83d languageName: node linkType: hard -"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.15" +"@sentry/node@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry/node@npm:10.53.1" dependencies: - "@emnapi/core": "npm:1.9.2" - "@emnapi/runtime": "npm:1.9.2" - "@napi-rs/wasm-runtime": "npm:^1.1.3" - conditions: cpu=wasm32 + "@fastify/otel": "npm:0.18.0" + "@opentelemetry/api": "npm:^1.9.1" + "@opentelemetry/core": "npm:^2.6.1" + "@opentelemetry/instrumentation": "npm:^0.214.0" + "@opentelemetry/instrumentation-amqplib": "npm:0.61.0" + "@opentelemetry/instrumentation-connect": "npm:0.57.0" + "@opentelemetry/instrumentation-dataloader": "npm:0.31.0" + "@opentelemetry/instrumentation-fs": "npm:0.33.0" + "@opentelemetry/instrumentation-generic-pool": "npm:0.57.0" + "@opentelemetry/instrumentation-graphql": "npm:0.62.0" + "@opentelemetry/instrumentation-hapi": "npm:0.60.0" + "@opentelemetry/instrumentation-http": "npm:0.214.0" + "@opentelemetry/instrumentation-kafkajs": "npm:0.23.0" + "@opentelemetry/instrumentation-knex": "npm:0.58.0" + "@opentelemetry/instrumentation-koa": "npm:0.62.0" + "@opentelemetry/instrumentation-lru-memoizer": "npm:0.58.0" + "@opentelemetry/instrumentation-mongodb": "npm:0.67.0" + "@opentelemetry/instrumentation-mongoose": "npm:0.60.0" + "@opentelemetry/instrumentation-mysql": "npm:0.60.0" + "@opentelemetry/instrumentation-mysql2": "npm:0.60.0" + "@opentelemetry/instrumentation-pg": "npm:0.66.0" + "@opentelemetry/instrumentation-tedious": "npm:0.33.0" + "@opentelemetry/sdk-trace-base": "npm:^2.6.1" + "@opentelemetry/semantic-conventions": "npm:^1.40.0" + "@prisma/instrumentation": "npm:7.6.0" + "@sentry/core": "npm:10.53.1" + "@sentry/node-core": "npm:10.53.1" + "@sentry/opentelemetry": "npm:10.53.1" + import-in-the-middle: "npm:^3.0.0" + checksum: 10c0/dac5869c1470fe68b372fc30851735349264010a581c813b5d64e3e7ebe74c7100f3a8552a01a8fb9a3157b1336204ef6ab1b780209bca0bb599e9083eb1141e languageName: node linkType: hard -"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.15" - conditions: os=win32 & cpu=arm64 +"@sentry/opentelemetry@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry/opentelemetry@npm:10.53.1" + dependencies: + "@sentry/core": "npm:10.53.1" + peerDependencies: + "@opentelemetry/api": ^1.9.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 + checksum: 10c0/ef1b3c5e6b245af4bbac8a21b14fd2220f5eed6e418b63c35298068d96f373e88b9342e8a05c6b68b252b4b9e3da5905572366a76f9bf59db0f2ec99d342e343 languageName: node linkType: hard -"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.15" - conditions: os=win32 & cpu=x64 +"@sentry/react@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry/react@npm:10.53.1" + dependencies: + "@sentry/browser": "npm:10.53.1" + "@sentry/core": "npm:10.53.1" + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + checksum: 10c0/961ab70cb0ada8c957b16752e9cb9698686241fc4e5ee19171a9ab85734cada46c714f36496f6abd14a18879eef77d1d821b8538fa968168278e227e9036dd1f languageName: node linkType: hard -"@rolldown/pluginutils@npm:1.0.0-beta.40": - version: 1.0.0-beta.40 - resolution: "@rolldown/pluginutils@npm:1.0.0-beta.40" - checksum: 10c0/057c640a526e7ba0f4c6d379918665017aaf616e682393df1f112f6e103e738267d27a70015f08992bd19186d7627e4c096d37f03b87e7cc4aa0353430c40e42 +"@sentry/rollup-plugin@npm:5.3.0": + version: 5.3.0 + resolution: "@sentry/rollup-plugin@npm:5.3.0" + dependencies: + "@sentry/bundler-plugin-core": "npm:5.3.0" + magic-string: "npm:~0.30.8" + peerDependencies: + rollup: ">=3.2.0" + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/a3ea6a9c0005139a90f818b5cc781a11f79cfab7f762e0cf64a02ff6a0801c113ceaedf9a1e68e7349a69b581ca26e908caee1a1c3a5a57353ea64d8d3a4cf49 languageName: node linkType: hard -"@rolldown/pluginutils@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "@rolldown/pluginutils@npm:1.0.0-rc.15" - checksum: 10c0/15eef6a65ee6b2d07405c16999c2333c40d8aeea60bbc35e04957992fe6477c7b278d3f02679688bb928ad2ef3fbd3a6149c116d7dc9928ebf8d1434a0591674 +"@sentry/tanstackstart-react@npm:10.53.1": + version: 10.53.1 + resolution: "@sentry/tanstackstart-react@npm:10.53.1" + dependencies: + "@opentelemetry/api": "npm:^1.9.1" + "@opentelemetry/semantic-conventions": "npm:^1.40.0" + "@sentry-internal/browser-utils": "npm:10.53.1" + "@sentry/core": "npm:10.53.1" + "@sentry/node": "npm:10.53.1" + "@sentry/react": "npm:10.53.1" + "@sentry/vite-plugin": "npm:^5.3.0" + checksum: 10c0/83dfaa9f6df14aaeedce33b5aadc5ffc8220e6cfae0de3d86c813e91cc45185b81768bfd055fda63f7b0f819e7b52e4f694d4487a5170221c384db0571c55ae7 languageName: node linkType: hard -"@rolldown/pluginutils@npm:1.0.0-rc.7": - version: 1.0.0-rc.7 - resolution: "@rolldown/pluginutils@npm:1.0.0-rc.7" - checksum: 10c0/9d5490b5805b25bcd1720ca01c4c032b55a0ef953dab36a8dd42c568e82214576baa464f3027cd5dff3fabcfbe3bf3db2251d12b60220f5d1cd2ffde5ee37082 +"@sentry/vite-plugin@npm:5.3.0, @sentry/vite-plugin@npm:^5.3.0": + version: 5.3.0 + resolution: "@sentry/vite-plugin@npm:5.3.0" + dependencies: + "@sentry/bundler-plugin-core": "npm:5.3.0" + "@sentry/rollup-plugin": "npm:5.3.0" + checksum: 10c0/669cdc4f52dad61dab4148e317a5fdc35bdbb67af5a8be9e545e4a283c1c4fe4bc9bed3faea231060d7a6a09e92aaef386167edbaa280a658c2baa2e742bd4d2 languageName: node linkType: hard @@ -2667,128 +3171,128 @@ __metadata: languageName: node linkType: hard -"@tailwindcss/node@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/node@npm:4.2.2" +"@tailwindcss/node@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/node@npm:4.3.0" dependencies: "@jridgewell/remapping": "npm:^2.3.5" - enhanced-resolve: "npm:^5.19.0" + enhanced-resolve: "npm:^5.21.0" jiti: "npm:^2.6.1" lightningcss: "npm:1.32.0" magic-string: "npm:^0.30.21" source-map-js: "npm:^1.2.1" - tailwindcss: "npm:4.2.2" - checksum: 10c0/4c0019355cd85a08f93ba3e179de37b83cc233b8ded4bd7714e633f89dd108928742e50966593257c2c1ab8db8914ea187dae007b5c692c869ceace11aeccede + tailwindcss: "npm:4.3.0" + checksum: 10c0/0c8c1eb7957d2c30fff731631301dd33d74359ed659821e804421c9cec4a14c7432f8ebcfcd535ffa210a2df228b85b4d431137d2e67f0d9239934ed2769d3bc languageName: node linkType: hard -"@tailwindcss/oxide-android-arm64@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-android-arm64@npm:4.2.2" +"@tailwindcss/oxide-android-arm64@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-android-arm64@npm:4.3.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-darwin-arm64@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-darwin-arm64@npm:4.2.2" +"@tailwindcss/oxide-darwin-arm64@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-darwin-arm64@npm:4.3.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-darwin-x64@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-darwin-x64@npm:4.2.2" +"@tailwindcss/oxide-darwin-x64@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-darwin-x64@npm:4.3.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide-freebsd-x64@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-freebsd-x64@npm:4.2.2" +"@tailwindcss/oxide-freebsd-x64@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-freebsd-x64@npm:4.3.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.2.2" +"@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.3.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm64-gnu@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-linux-arm64-gnu@npm:4.2.2" +"@tailwindcss/oxide-linux-arm64-gnu@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-linux-arm64-gnu@npm:4.3.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@tailwindcss/oxide-linux-arm64-musl@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-linux-arm64-musl@npm:4.2.2" +"@tailwindcss/oxide-linux-arm64-musl@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-linux-arm64-musl@npm:4.3.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@tailwindcss/oxide-linux-x64-gnu@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-linux-x64-gnu@npm:4.2.2" +"@tailwindcss/oxide-linux-x64-gnu@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-linux-x64-gnu@npm:4.3.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@tailwindcss/oxide-linux-x64-musl@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-linux-x64-musl@npm:4.2.2" +"@tailwindcss/oxide-linux-x64-musl@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-linux-x64-musl@npm:4.3.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@tailwindcss/oxide-wasm32-wasi@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-wasm32-wasi@npm:4.2.2" +"@tailwindcss/oxide-wasm32-wasi@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-wasm32-wasi@npm:4.3.0" dependencies: - "@emnapi/core": "npm:^1.8.1" - "@emnapi/runtime": "npm:^1.8.1" - "@emnapi/wasi-threads": "npm:^1.1.0" - "@napi-rs/wasm-runtime": "npm:^1.1.1" + "@emnapi/core": "npm:^1.10.0" + "@emnapi/runtime": "npm:^1.10.0" + "@emnapi/wasi-threads": "npm:^1.2.1" + "@napi-rs/wasm-runtime": "npm:^1.1.4" "@tybys/wasm-util": "npm:^0.10.1" tslib: "npm:^2.8.1" conditions: cpu=wasm32 languageName: node linkType: hard -"@tailwindcss/oxide-win32-arm64-msvc@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-win32-arm64-msvc@npm:4.2.2" +"@tailwindcss/oxide-win32-arm64-msvc@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-win32-arm64-msvc@npm:4.3.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@tailwindcss/oxide-win32-x64-msvc@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide-win32-x64-msvc@npm:4.2.2" +"@tailwindcss/oxide-win32-x64-msvc@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide-win32-x64-msvc@npm:4.3.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@tailwindcss/oxide@npm:4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/oxide@npm:4.2.2" +"@tailwindcss/oxide@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/oxide@npm:4.3.0" dependencies: - "@tailwindcss/oxide-android-arm64": "npm:4.2.2" - "@tailwindcss/oxide-darwin-arm64": "npm:4.2.2" - "@tailwindcss/oxide-darwin-x64": "npm:4.2.2" - "@tailwindcss/oxide-freebsd-x64": "npm:4.2.2" - "@tailwindcss/oxide-linux-arm-gnueabihf": "npm:4.2.2" - "@tailwindcss/oxide-linux-arm64-gnu": "npm:4.2.2" - "@tailwindcss/oxide-linux-arm64-musl": "npm:4.2.2" - "@tailwindcss/oxide-linux-x64-gnu": "npm:4.2.2" - "@tailwindcss/oxide-linux-x64-musl": "npm:4.2.2" - "@tailwindcss/oxide-wasm32-wasi": "npm:4.2.2" - "@tailwindcss/oxide-win32-arm64-msvc": "npm:4.2.2" - "@tailwindcss/oxide-win32-x64-msvc": "npm:4.2.2" + "@tailwindcss/oxide-android-arm64": "npm:4.3.0" + "@tailwindcss/oxide-darwin-arm64": "npm:4.3.0" + "@tailwindcss/oxide-darwin-x64": "npm:4.3.0" + "@tailwindcss/oxide-freebsd-x64": "npm:4.3.0" + "@tailwindcss/oxide-linux-arm-gnueabihf": "npm:4.3.0" + "@tailwindcss/oxide-linux-arm64-gnu": "npm:4.3.0" + "@tailwindcss/oxide-linux-arm64-musl": "npm:4.3.0" + "@tailwindcss/oxide-linux-x64-gnu": "npm:4.3.0" + "@tailwindcss/oxide-linux-x64-musl": "npm:4.3.0" + "@tailwindcss/oxide-wasm32-wasi": "npm:4.3.0" + "@tailwindcss/oxide-win32-arm64-msvc": "npm:4.3.0" + "@tailwindcss/oxide-win32-x64-msvc": "npm:4.3.0" dependenciesMeta: "@tailwindcss/oxide-android-arm64": optional: true @@ -2814,123 +3318,132 @@ __metadata: optional: true "@tailwindcss/oxide-win32-x64-msvc": optional: true - checksum: 10c0/22f78d73ffcec2d0d91f9fbfc29fed23c260e3e53f510f0b2598e322bf56a92ceb7e6f5a1c88ad1e3c7cfee9dd8d39285c411de5ec3225cdae2cbfdb737862e5 + checksum: 10c0/9a04ee1e59df5e596765ee3ffb0f6eb13e8abab3a8331d2bb397adb5de7090e159a6b98e17401477678c41fa779f0b8cd04ba4ef4432054ae6cdeb562df9a243 languageName: node linkType: hard -"@tailwindcss/vite@npm:^4.2.2": - version: 4.2.2 - resolution: "@tailwindcss/vite@npm:4.2.2" +"@tailwindcss/vite@npm:4.3.0": + version: 4.3.0 + resolution: "@tailwindcss/vite@npm:4.3.0" dependencies: - "@tailwindcss/node": "npm:4.2.2" - "@tailwindcss/oxide": "npm:4.2.2" - tailwindcss: "npm:4.2.2" + "@tailwindcss/node": "npm:4.3.0" + "@tailwindcss/oxide": "npm:4.3.0" + tailwindcss: "npm:4.3.0" peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - checksum: 10c0/f6ec4b0d6a8e79208873fb357a8ed9b6fd8eb3000d153ec2590c61dba5bfbe79c0951a215d187958d2b8a3c5b45c25ebcefac7a6dea882bb27b4b2898c54266f + checksum: 10c0/8a95e09220b4376941751a2b9b51ee3249555699de470c565adeda6c5ca784e7027b931b451125302594dfd7007ab63ddc5906168385442dba64911c064601c8 languageName: node linkType: hard -"@tanstack/history@npm:1.161.6": - version: 1.161.6 - resolution: "@tanstack/history@npm:1.161.6" - checksum: 10c0/38be1af2ebb3511874f2ac922527b84fc01c568e24833a9fa85d483bcc88311e0daae38a97a80eee22581bf07350875a04f33a5c2d9d4edf421bed2f5f5da4a5 +"@tanstack/history@npm:1.162.0": + version: 1.162.0 + resolution: "@tanstack/history@npm:1.162.0" + checksum: 10c0/adfefcae672b548902d63b1f7de6f6a15fa2efcb0c32114fd581af1b3832b590edafffb7b14f47237849a0d4cb0ab9cfffc315841d10096599938860d2b7e641 languageName: node linkType: hard -"@tanstack/react-router@npm:1.168.23": - version: 1.168.23 - resolution: "@tanstack/react-router@npm:1.168.23" +"@tanstack/react-router@npm:1.170.8": + version: 1.170.8 + resolution: "@tanstack/react-router@npm:1.170.8" dependencies: - "@tanstack/history": "npm:1.161.6" + "@tanstack/history": "npm:1.162.0" "@tanstack/react-store": "npm:^0.9.3" - "@tanstack/router-core": "npm:1.168.15" + "@tanstack/router-core": "npm:1.171.6" isbot: "npm:^5.1.22" peerDependencies: react: ">=18.0.0 || >=19.0.0" react-dom: ">=18.0.0 || >=19.0.0" - checksum: 10c0/6723b5ea718cbd95796faf64613a70a7951a2d7c71d1c039d28b0f25ea634b7cf94317960e5f722c09da8f0e62134e7469dff9fd9d698ee103ef444709367a1c + checksum: 10c0/80517762727523c375a2c5980c6e59135c158279e6a460462ec70e69c0d1cb2cadec14ed558207315051a1954ff54474f34730835f7e9818034b678509510430 languageName: node linkType: hard -"@tanstack/react-start-client@npm:1.166.40": - version: 1.166.40 - resolution: "@tanstack/react-start-client@npm:1.166.40" +"@tanstack/react-start-client@npm:1.168.3": + version: 1.168.3 + resolution: "@tanstack/react-start-client@npm:1.168.3" dependencies: - "@tanstack/react-router": "npm:1.168.23" - "@tanstack/router-core": "npm:1.168.15" - "@tanstack/start-client-core": "npm:1.167.17" + "@tanstack/react-router": "npm:1.170.8" + "@tanstack/router-core": "npm:1.171.6" + "@tanstack/start-client-core": "npm:1.170.3" peerDependencies: react: ">=18.0.0 || >=19.0.0" react-dom: ">=18.0.0 || >=19.0.0" - checksum: 10c0/2793b6352c4ee0e45cca53f3100610e62b7ed02e4fdf4d33d6f7debf569f5e53a18ee89686a51dd3e502afe2fbb52b275c42c24a3a0e69faf831ba9c8ed967ce + checksum: 10c0/9aa1762232a23440f4a32ce9c88a81b44e433e8690b5352e07695613a5e1db65e5aea04b23e487090bf9c25c001695fd9ae2f63a10518b8eaa65ae6d214c077a languageName: node linkType: hard -"@tanstack/react-start-rsc@npm:0.0.21": - version: 0.0.21 - resolution: "@tanstack/react-start-rsc@npm:0.0.21" +"@tanstack/react-start-rsc@npm:0.1.11": + version: 0.1.11 + resolution: "@tanstack/react-start-rsc@npm:0.1.11" dependencies: - "@tanstack/react-router": "npm:1.168.23" - "@tanstack/react-start-server": "npm:1.166.41" - "@tanstack/router-core": "npm:1.168.15" - "@tanstack/router-utils": "npm:1.161.6" - "@tanstack/start-client-core": "npm:1.167.17" - "@tanstack/start-fn-stubs": "npm:1.161.6" - "@tanstack/start-plugin-core": "npm:1.167.35" - "@tanstack/start-server-core": "npm:1.167.19" - "@tanstack/start-storage-context": "npm:1.166.29" + "@tanstack/react-router": "npm:1.170.8" + "@tanstack/react-start-server": "npm:1.167.8" + "@tanstack/router-core": "npm:1.171.6" + "@tanstack/router-utils": "npm:1.162.1" + "@tanstack/start-client-core": "npm:1.170.3" + "@tanstack/start-fn-stubs": "npm:1.162.0" + "@tanstack/start-plugin-core": "npm:1.171.4" + "@tanstack/start-server-core": "npm:1.169.3" + "@tanstack/start-storage-context": "npm:1.167.8" pathe: "npm:^2.0.3" peerDependencies: + "@rspack/core": ">=2.0.0-0" "@vitejs/plugin-rsc": ">=0.5.20" react: ">=18.0.0 || >=19.0.0" react-dom: ">=18.0.0 || >=19.0.0" + react-server-dom-rspack: ">=0.0.2" peerDependenciesMeta: + "@rspack/core": + optional: true "@vitejs/plugin-rsc": optional: true - checksum: 10c0/dde46b07747c81ac0373477bd72bc843386d51819c80e6ecca024f620a37c215fcfc718231ef1c94a5d0ed8cde9cc7a7823a622b8f9fdc6e1dcab5257e5519be + react-server-dom-rspack: + optional: true + checksum: 10c0/ea8faffcbec3e5f986e4cbe7296cdcc9a518a7186a347a31d28feec086234a9e9b0f17b2685ea26531024da8205f69ca521d69be4fb66dbac1e4449ce9479ab9 languageName: node linkType: hard -"@tanstack/react-start-server@npm:1.166.41": - version: 1.166.41 - resolution: "@tanstack/react-start-server@npm:1.166.41" +"@tanstack/react-start-server@npm:1.167.8": + version: 1.167.8 + resolution: "@tanstack/react-start-server@npm:1.167.8" dependencies: - "@tanstack/history": "npm:1.161.6" - "@tanstack/react-router": "npm:1.168.23" - "@tanstack/router-core": "npm:1.168.15" - "@tanstack/start-client-core": "npm:1.167.17" - "@tanstack/start-server-core": "npm:1.167.19" + "@tanstack/history": "npm:1.162.0" + "@tanstack/react-router": "npm:1.170.8" + "@tanstack/router-core": "npm:1.171.6" + "@tanstack/start-client-core": "npm:1.170.3" + "@tanstack/start-server-core": "npm:1.169.3" peerDependencies: react: ">=18.0.0 || >=19.0.0" react-dom: ">=18.0.0 || >=19.0.0" - checksum: 10c0/69b96b3b6ce712c527d3f4cfb654d99fa263e473b1bfcad6ff684b0b05ff3b2898cd41caddd32f9780719884c2ff302a4bbef8c2ff116c9f6c877dcb67048dfc + checksum: 10c0/f18ec42c850fbdfae1056627852921cc24f1dff383cc4d74d2e9dabeb62ec41cd713c8af3ecd1228a515071bfb1389047a716cbe23a6d1f6307ef8449fae17ef languageName: node linkType: hard -"@tanstack/react-start@npm:1.167.42": - version: 1.167.42 - resolution: "@tanstack/react-start@npm:1.167.42" +"@tanstack/react-start@npm:1.168.11": + version: 1.168.11 + resolution: "@tanstack/react-start@npm:1.168.11" dependencies: - "@tanstack/react-router": "npm:1.168.23" - "@tanstack/react-start-client": "npm:1.166.40" - "@tanstack/react-start-rsc": "npm:0.0.21" - "@tanstack/react-start-server": "npm:1.166.41" - "@tanstack/router-utils": "npm:^1.161.6" - "@tanstack/start-client-core": "npm:1.167.17" - "@tanstack/start-plugin-core": "npm:1.167.35" - "@tanstack/start-server-core": "npm:1.167.19" + "@tanstack/react-router": "npm:1.170.8" + "@tanstack/react-start-client": "npm:1.168.3" + "@tanstack/react-start-rsc": "npm:0.1.11" + "@tanstack/react-start-server": "npm:1.167.8" + "@tanstack/router-utils": "npm:1.162.1" + "@tanstack/start-client-core": "npm:1.170.3" + "@tanstack/start-plugin-core": "npm:1.171.4" + "@tanstack/start-server-core": "npm:1.169.3" pathe: "npm:^2.0.3" peerDependencies: + "@rsbuild/core": ^2.0.0 react: ">=18.0.0 || >=19.0.0" react-dom: ">=18.0.0 || >=19.0.0" vite: ">=7.0.0" peerDependenciesMeta: + "@rsbuild/core": + optional: true "@vitejs/plugin-rsc": optional: true - bin: - intent: bin/intent.js - checksum: 10c0/fb167720677980fd05c3e3e1b9cc5045fd04ebce07263ac60a1864e59a282e54c216d2a6a07b03965dc037e89ee351e75908b80c7dad689c866a24b41feb045b + vite: + optional: true + checksum: 10c0/b0580c86462a50e179055e1c35c69fd83dbaf3adb9f6bf93bee204bfc721928de8e6ccd827d7fa929a038189f56c440f768d3fa738ffe7e524fc88e7d17e6c10 languageName: node linkType: hard @@ -2947,39 +3460,37 @@ __metadata: languageName: node linkType: hard -"@tanstack/router-core@npm:1.168.15": - version: 1.168.15 - resolution: "@tanstack/router-core@npm:1.168.15" +"@tanstack/router-core@npm:1.171.6": + version: 1.171.6 + resolution: "@tanstack/router-core@npm:1.171.6" dependencies: - "@tanstack/history": "npm:1.161.6" + "@tanstack/history": "npm:1.162.0" cookie-es: "npm:^3.0.0" - seroval: "npm:^1.5.0" - seroval-plugins: "npm:^1.5.0" - bin: - intent: bin/intent.js - checksum: 10c0/fc97469b631632ddf0511824dd1279f3b53918e7f32d31da4bc05f2dc92f149e423f647fdcbccd0f8e7d6dd5366016b3033e35716bf119a6d7fa7937cd7ca2c9 + seroval: "npm:^1.5.4" + seroval-plugins: "npm:^1.5.4" + checksum: 10c0/161543846dca9db99eb2cb4d3dc62d45bff2b3a8fd6d835e8d044410d065fbb200e242faafd6cc94b5b50ebff21dd626910fa5fbd1213003f10992666a99858a languageName: node linkType: hard -"@tanstack/router-generator@npm:1.166.32": - version: 1.166.32 - resolution: "@tanstack/router-generator@npm:1.166.32" +"@tanstack/router-generator@npm:1.167.10": + version: 1.167.10 + resolution: "@tanstack/router-generator@npm:1.167.10" dependencies: "@babel/types": "npm:^7.28.5" - "@tanstack/router-core": "npm:1.168.15" - "@tanstack/router-utils": "npm:1.161.6" - "@tanstack/virtual-file-routes": "npm:1.161.7" + "@tanstack/router-core": "npm:1.171.6" + "@tanstack/router-utils": "npm:1.162.1" + "@tanstack/virtual-file-routes": "npm:1.162.0" + jiti: "npm:^2.7.0" magic-string: "npm:^0.30.21" prettier: "npm:^3.5.0" - tsx: "npm:^4.19.2" - zod: "npm:^3.24.2" - checksum: 10c0/2c53284088abd6743347f30a1865f1ff0d84f612ffd4ee3ba7e30630ee9e5dd7df0c808729702fafc43935cc3fd4def28fdd763f3436b266dc18f82ce846f76c + zod: "npm:^4.4.3" + checksum: 10c0/2c909d74a1bb12e2f265de9883d234feb446eb20b2153511ba298ccf3ed58fca172e1934ea24b2ac43782c8aea2471e54c9629c8402ec4ed8d6d93670fcab325 languageName: node linkType: hard -"@tanstack/router-plugin@npm:1.167.22": - version: 1.167.22 - resolution: "@tanstack/router-plugin@npm:1.167.22" +"@tanstack/router-plugin@npm:1.168.11": + version: 1.168.11 + resolution: "@tanstack/router-plugin@npm:1.168.11" dependencies: "@babel/core": "npm:^7.28.5" "@babel/plugin-syntax-jsx": "npm:^7.27.1" @@ -2987,16 +3498,16 @@ __metadata: "@babel/template": "npm:^7.27.2" "@babel/traverse": "npm:^7.28.5" "@babel/types": "npm:^7.28.5" - "@tanstack/router-core": "npm:1.168.15" - "@tanstack/router-generator": "npm:1.166.32" - "@tanstack/router-utils": "npm:1.161.6" - "@tanstack/virtual-file-routes": "npm:1.161.7" - chokidar: "npm:^3.6.0" - unplugin: "npm:^2.1.2" - zod: "npm:^3.24.2" + "@tanstack/router-core": "npm:1.171.6" + "@tanstack/router-generator": "npm:1.167.10" + "@tanstack/router-utils": "npm:1.162.1" + "@tanstack/virtual-file-routes": "npm:1.162.0" + chokidar: "npm:^5.0.0" + unplugin: "npm:^3.0.0" + zod: "npm:^4.4.3" peerDependencies: - "@rsbuild/core": ">=1.0.2" - "@tanstack/react-router": ^1.168.21 + "@rsbuild/core": ">=1.0.2 || ^2.0.0" + "@tanstack/react-router": ^1.170.8 vite: ">=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0" vite-plugin-solid: ^2.11.10 || ^3.0.0-0 webpack: ">=5.92.0" @@ -3011,15 +3522,13 @@ __metadata: optional: true webpack: optional: true - bin: - intent: bin/intent.js - checksum: 10c0/f92ffb6a711181d8ddd8ab325926ff1422aa8d7cdfdd598d33068abb0d04e718e138619defe207c789166ed6e5c9a25d5a75dc16aee6689a83a3b3cba4d110f0 + checksum: 10c0/3f87b861e038ba470f067906f1bb056398c4217e7a2e0d6060b5b921e0ce275f7aa0915238a3cfd37c7610feeee31ccc45d306b7971675980c4d7f06027e3e44 languageName: node linkType: hard -"@tanstack/router-utils@npm:1.161.6, @tanstack/router-utils@npm:^1.161.6": - version: 1.161.6 - resolution: "@tanstack/router-utils@npm:1.161.6" +"@tanstack/router-utils@npm:1.162.1": + version: 1.162.1 + resolution: "@tanstack/router-utils@npm:1.162.1" dependencies: "@babel/core": "npm:^7.28.5" "@babel/generator": "npm:^7.28.5" @@ -3030,85 +3539,89 @@ __metadata: diff: "npm:^8.0.2" pathe: "npm:^2.0.3" tinyglobby: "npm:^0.2.15" - checksum: 10c0/4713a58ce733d8cb3681366d26add95df6849445aaa3e5fb0e8caeee4a077fd7eaa399874a588b276e519f932008572a5b8ed10acd478062a463beefeb0580ff + checksum: 10c0/9fcb9cad43ea02795ad21b9bd4daf63c0f80fd46cf00fe98c9973627af7b46ce13a0ca6c151f3a40a561429e61b66ca6f6594755a08dd57d2aaf24a03579a2af languageName: node linkType: hard -"@tanstack/start-client-core@npm:1.167.17": - version: 1.167.17 - resolution: "@tanstack/start-client-core@npm:1.167.17" +"@tanstack/start-client-core@npm:1.170.3": + version: 1.170.3 + resolution: "@tanstack/start-client-core@npm:1.170.3" dependencies: - "@tanstack/router-core": "npm:1.168.15" - "@tanstack/start-fn-stubs": "npm:1.161.6" - "@tanstack/start-storage-context": "npm:1.166.29" - seroval: "npm:^1.5.0" - bin: - intent: bin/intent.js - checksum: 10c0/409f12fe19490b1a74f64b3074b02d59646edca04ef4cdaa1ca189424265813e6217e4f50aca79b221b034e1c5d46b5271668d3366e2759be2aaee104d1b0fb6 + "@tanstack/router-core": "npm:1.171.6" + "@tanstack/start-fn-stubs": "npm:1.162.0" + "@tanstack/start-storage-context": "npm:1.167.8" + seroval: "npm:^1.5.4" + checksum: 10c0/3d41befbb87ff3531768158da8963f5a8bdb9bcba017c0c8c583422e853fbffebd1c932f51ff0d0f4d25436c03ad8e52774ab0eaf6579cb2d17c645d0275973c languageName: node linkType: hard -"@tanstack/start-fn-stubs@npm:1.161.6": - version: 1.161.6 - resolution: "@tanstack/start-fn-stubs@npm:1.161.6" - checksum: 10c0/f822b8c7e79c884488b24b6f03648d260467eeff3662f2c8e91670dc980c1baaf194faa98a073830023c9d087a1e555555a53f3dea175df37aa7dfaff271db62 +"@tanstack/start-fn-stubs@npm:1.162.0": + version: 1.162.0 + resolution: "@tanstack/start-fn-stubs@npm:1.162.0" + checksum: 10c0/74a29594f38204e547871d201abf6dd297adf58754ed39ef8fa2a6bea6a2999386445023e50dba8fbe013bbb08f5d5cbd3f96b9301e6a8c8e4cf6047c24ca1f0 languageName: node linkType: hard -"@tanstack/start-plugin-core@npm:1.167.35": - version: 1.167.35 - resolution: "@tanstack/start-plugin-core@npm:1.167.35" +"@tanstack/start-plugin-core@npm:1.171.4": + version: 1.171.4 + resolution: "@tanstack/start-plugin-core@npm:1.171.4" dependencies: "@babel/code-frame": "npm:7.27.1" "@babel/core": "npm:^7.28.5" "@babel/types": "npm:^7.28.5" - "@rolldown/pluginutils": "npm:1.0.0-beta.40" - "@tanstack/router-core": "npm:1.168.15" - "@tanstack/router-generator": "npm:1.166.32" - "@tanstack/router-plugin": "npm:1.167.22" - "@tanstack/router-utils": "npm:1.161.6" - "@tanstack/start-client-core": "npm:1.167.17" - "@tanstack/start-server-core": "npm:1.167.19" + "@rolldown/pluginutils": "npm:1.0.1" + "@tanstack/router-core": "npm:1.171.6" + "@tanstack/router-generator": "npm:1.167.10" + "@tanstack/router-plugin": "npm:1.168.11" + "@tanstack/router-utils": "npm:1.162.1" + "@tanstack/start-client-core": "npm:1.170.3" + "@tanstack/start-server-core": "npm:1.169.3" cheerio: "npm:^1.0.0" exsolve: "npm:^1.0.7" + lightningcss: "npm:^1.32.0" pathe: "npm:^2.0.3" picomatch: "npm:^4.0.3" - seroval: "npm:^1.5.0" + seroval: "npm:^1.5.4" source-map: "npm:^0.7.6" srvx: "npm:^0.11.9" tinyglobby: "npm:^0.2.15" ufo: "npm:^1.5.4" vitefu: "npm:^1.1.1" xmlbuilder2: "npm:^4.0.3" - zod: "npm:^3.24.2" + zod: "npm:^4.4.3" peerDependencies: + "@rsbuild/core": ^2.0.0 vite: ">=7.0.0" - checksum: 10c0/acc7725018d4bf9ec173887dc98b7c9e2c6739e26efe2b2b40fcd1d567b4158dc30772459da4142118f2b415972cc1393e58546c1e779b118e788177e35c27fa + peerDependenciesMeta: + "@rsbuild/core": + optional: true + vite: + optional: true + checksum: 10c0/3c708cbd4b42cdc3e8b71b512900d979e667c521cf795b06bb086ddd3d38620674cfb52888268de3e4f947c28bbf6c0f0c8f5585ef5413ccad19ac3064d69ef9 languageName: node linkType: hard -"@tanstack/start-server-core@npm:1.167.19": - version: 1.167.19 - resolution: "@tanstack/start-server-core@npm:1.167.19" +"@tanstack/start-server-core@npm:1.169.3": + version: 1.169.3 + resolution: "@tanstack/start-server-core@npm:1.169.3" dependencies: - "@tanstack/history": "npm:1.161.6" - "@tanstack/router-core": "npm:1.168.15" - "@tanstack/start-client-core": "npm:1.167.17" - "@tanstack/start-storage-context": "npm:1.166.29" + "@tanstack/history": "npm:1.162.0" + "@tanstack/router-core": "npm:1.171.6" + "@tanstack/start-client-core": "npm:1.170.3" + "@tanstack/start-storage-context": "npm:1.167.8" + fetchdts: "npm:^0.1.6" h3-v2: "npm:h3@2.0.1-rc.20" - seroval: "npm:^1.5.0" - bin: - intent: bin/intent.js - checksum: 10c0/707ca83ff4c367864dbf877b72fcd571becb3b2f64797eed46fc5507776f6a50244443ac9e6cc28c9f236a1c83cb3fddf58d6ed8d862c95d191bb43e010e3389 + seroval: "npm:^1.5.4" + checksum: 10c0/e4049e51fc9308f4ca72b31f76cccd49ab3996f78cc47d86617f3c6e3b719ded6691800b9f01b102b1503cc42c260acddf01106d131e3d429355cef2d09ccb1d languageName: node linkType: hard -"@tanstack/start-storage-context@npm:1.166.29": - version: 1.166.29 - resolution: "@tanstack/start-storage-context@npm:1.166.29" +"@tanstack/start-storage-context@npm:1.167.8": + version: 1.167.8 + resolution: "@tanstack/start-storage-context@npm:1.167.8" dependencies: - "@tanstack/router-core": "npm:1.168.15" - checksum: 10c0/bfcf06cade2fb33fe92aaa4d89e2d77a8c4c297a5ec22474aa62742f5dcec4154433dc251d32b522ece32d5831ce1894d52676c05637bc015c2a07f9717e5b39 + "@tanstack/router-core": "npm:1.171.6" + checksum: 10c0/5e51ac0a50cbaa5b51872a28c48d6ebd11a7cf26d4e189991022686467287e97ce353bfb23c07e3bbad82a32105355cd7ea57b181234daffd790268dd91f60b2 languageName: node linkType: hard @@ -3119,12 +3632,10 @@ __metadata: languageName: node linkType: hard -"@tanstack/virtual-file-routes@npm:1.161.7": - version: 1.161.7 - resolution: "@tanstack/virtual-file-routes@npm:1.161.7" - bin: - intent: bin/intent.js - checksum: 10c0/fee6b4b3dbb6ea9b490c4c9a6a113ec238254cdae3c8533f9f8e6a723f69474acda6095c255a258f6fd01990249274116ca502ffdb7ad84af9085bbd9b873f6c +"@tanstack/virtual-file-routes@npm:1.162.0": + version: 1.162.0 + resolution: "@tanstack/virtual-file-routes@npm:1.162.0" + checksum: 10c0/4c7f36e792b71935553e9e7dfa536e072417f5794074a20f79feef63d9745590b15e248162182a070de9033fa4193c18b98cc4c5d5c04e3df9db15a4ba2aae2e languageName: node linkType: hard @@ -3137,6 +3648,15 @@ __metadata: languageName: node linkType: hard +"@types/connect@npm:3.4.38": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c + languageName: node + linkType: hard + "@types/debug@npm:^4.0.0": version: 4.1.13 resolution: "@types/debug@npm:4.1.13" @@ -3194,16 +3714,65 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22": - version: 22.19.17 - resolution: "@types/node@npm:22.19.17" +"@types/mysql@npm:2.15.27": + version: 2.15.27 + resolution: "@types/mysql@npm:2.15.27" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/d34064de1697e9e29dbad313df759a8c7aff9d9d1918c9b666b1ebc894b9a0c1c6f4ae779453fdcd20b892fa60a8e55640138c292c6c2a28d2f758eaeb539ce3 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 25.9.1 + resolution: "@types/node@npm:25.9.1" + dependencies: + undici-types: "npm:>=7.24.0 <7.24.7" + checksum: 10c0/9a04682842bebbcf21a1779dfeab9aa733d7bd7bbc0a0edb641ab3a9a3d43eac543225acf669c334f458f1956443ebc072bc3c72840c543b8b356cab5c82d456 + languageName: node + linkType: hard + +"@types/node@npm:^24": + version: 24.12.4 + resolution: "@types/node@npm:24.12.4" + dependencies: + undici-types: "npm:~7.16.0" + checksum: 10c0/d2c36b78b6050d8677769fa05a32243061675e81ddc2bb43955d91a671af3465506ef2731a24c0c9ab42b6b679bd5c1513de45bbe9ea278c2c07ee63b564b61b + languageName: node + linkType: hard + +"@types/pg-pool@npm:2.0.7": + version: 2.0.7 + resolution: "@types/pg-pool@npm:2.0.7" dependencies: - undici-types: "npm:~6.21.0" - checksum: 10c0/b66c484c0a9f6d88b1ef360b0f487717234ee1a482cb2551ff73d9f3c43a42a777daf4c8a5eee970960728f8fe1f3877d3d8c6ffabcbca74cb401a59db700fa4 + "@types/pg": "npm:*" + checksum: 10c0/4935bc2e5af3990f3f80abd83af5d38e2c3fb01edea4f301fe2ef2c07173646cd06ec361dd0231a4085be405bb54e924a861ae6d0a3bf88b907f331b5a79111a languageName: node linkType: hard -"@types/react-dom@npm:^19.2.3": +"@types/pg@npm:*": + version: 8.20.0 + resolution: "@types/pg@npm:8.20.0" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^2.2.0" + checksum: 10c0/c8b5aa794ea074aa20d0c1ef6c721ce0fe16f2c084d0ccc32b7f12909a08ec969e6b01a094ce8e7019cc425381c4b59f261bd0133daf0c6d4aca5c6c492e8312 + languageName: node + linkType: hard + +"@types/pg@npm:8.15.6": + version: 8.15.6 + resolution: "@types/pg@npm:8.15.6" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^2.2.0" + checksum: 10c0/7f93f83a4da0dc6133918f824d826fa34e78fb8cf86392d28a0e095c836c6910c014ced5d4b364d83e8485a65ce369adeb9663b14ba301241d4c0f80073007f3 + languageName: node + linkType: hard + +"@types/react-dom@npm:19.2.3": version: 19.2.3 resolution: "@types/react-dom@npm:19.2.3" peerDependencies: @@ -3212,12 +3781,21 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^19.2.14": - version: 19.2.14 - resolution: "@types/react@npm:19.2.14" +"@types/react@npm:19.2.15": + version: 19.2.15 + resolution: "@types/react@npm:19.2.15" dependencies: csstype: "npm:^3.2.2" - checksum: 10c0/7d25bf41b57719452d86d2ac0570b659210402707313a36ee612666bf11275a1c69824f8c3ee1fdca077ccfe15452f6da8f1224529b917050eb2d861e52b59b7 + checksum: 10c0/b554eab715bb14e581f0ae60e5cefe91e1a5e06c31022b543a9806cf224aa056f21e4fb46208e46eb934d86ca0b247ebc82377192a0dead303cb28b8764c6e67 + languageName: node + linkType: hard + +"@types/tedious@npm:^4.0.14": + version: 4.0.14 + resolution: "@types/tedious@npm:4.0.14" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/d2914f8e9b5b998e4275ec5f0130cba1c2fb47e75616b5c125a65ef6c1db2f1dc3f978c7900693856a15d72bbb4f4e94f805537a4ecb6dc126c64415d31c0590 languageName: node linkType: hard @@ -3242,11 +3820,11 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-react@npm:^6.0.1": - version: 6.0.1 - resolution: "@vitejs/plugin-react@npm:6.0.1" +"@vitejs/plugin-react@npm:6.0.2": + version: 6.0.2 + resolution: "@vitejs/plugin-react@npm:6.0.2" dependencies: - "@rolldown/pluginutils": "npm:1.0.0-rc.7" + "@rolldown/pluginutils": "npm:^1.0.0" peerDependencies: "@rolldown/plugin-babel": ^0.1.7 || ^0.2.0 babel-plugin-react-compiler: ^1.0.0 @@ -3256,7 +3834,7 @@ __metadata: optional: true babel-plugin-react-compiler: optional: true - checksum: 10c0/6c42f53a970cb6b0776ba5b4203bb01690ac564c56fca706d4037b50aec965ddc0f11530ab58ab2cd0fbe8c12e14cff6966b22d90391283b4a53294e3ddd478d + checksum: 10c0/6e2d90974e05f2a9aefafad1d137b75c3b3b4bf3f2affdbfe77c6b11b24832cff22dd8852430c6341e2fb5b00a4513fb00db306a6abdbec6f0f5841e93bbcfba languageName: node linkType: hard @@ -3267,6 +3845,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-attributes@npm:^1.9.5": + version: 1.9.5 + resolution: "acorn-import-attributes@npm:1.9.5" + peerDependencies: + acorn: ^8 + checksum: 10c0/5926eaaead2326d5a86f322ff1b617b0f698aa61dc719a5baa0e9d955c9885cc71febac3fb5bacff71bbf2c4f9c12db2056883c68c53eb962c048b952e1e013d + languageName: node + linkType: hard + "acorn-jsx@npm:^5.0.0": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -3285,6 +3872,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: "npm:4" + checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 + languageName: node + linkType: hard + "agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": version: 7.1.4 resolution: "agent-base@npm:7.1.4" @@ -3299,16 +3895,6 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac - languageName: node - linkType: hard - "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -3369,13 +3955,6 @@ __metadata: languageName: node linkType: hard -"binary-extensions@npm:^2.0.0": - version: 2.3.0 - resolution: "binary-extensions@npm:2.3.0" - checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 - languageName: node - linkType: hard - "blake3-wasm@npm:2.1.5": version: 2.1.5 resolution: "blake3-wasm@npm:2.1.5" @@ -3399,15 +3978,6 @@ __metadata: languageName: node linkType: hard -"braces@npm:~3.0.2": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - "browserslist@npm:^4.24.0": version: 4.28.2 resolution: "browserslist@npm:4.28.2" @@ -3516,25 +4086,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.6.0": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" - dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 - languageName: node - linkType: hard - "chokidar@npm:^5.0.0": version: 5.0.0 resolution: "chokidar@npm:5.0.0" @@ -3551,6 +4102,13 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^2.2.0": + version: 2.2.0 + resolution: "cjs-module-lexer@npm:2.2.0" + checksum: 10c0/aec4ca58f87145fac221386790ecaae8b012f2e2359a45acb61d8c75ea4fa84f6ea869f17abc1a7e91a808eff0fed581209632f03540de16f72f0a28f5fd35ac + languageName: node + linkType: hard + "class-variance-authority@npm:^0.7.1": version: 0.7.1 resolution: "class-variance-authority@npm:0.7.1" @@ -3560,7 +4118,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.1.1": +"clsx@npm:2.1.1, clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 @@ -3636,14 +4194,14 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^4.1.0": - version: 4.1.0 - resolution: "date-fns@npm:4.1.0" - checksum: 10c0/b79ff32830e6b7faa009590af6ae0fb8c3fd9ffad46d930548fbb5acf473773b4712ae887e156ba91a7b3dc30591ce0f517d69fd83bd9c38650fdc03b4e0bac8 +"date-fns@npm:4.3.0": + version: 4.3.0 + resolution: "date-fns@npm:4.3.0" + checksum: 10c0/f1e8ec36270dd4c9e32d93195fb02a109ff46b397690a68f4a0c3bea0a1882e38a67969004db0a28f890b15bcdd6b323faa2f07cde3b67a2edfacc3fe078f95e languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.5": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -3739,6 +4297,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^16.3.1": + version: 16.6.1 + resolution: "dotenv@npm:16.6.1" + checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.5.328": version: 1.5.340 resolution: "electron-to-chromium@npm:1.5.340" @@ -3756,13 +4321,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.19.0": - version: 5.20.1 - resolution: "enhanced-resolve@npm:5.20.1" +"enhanced-resolve@npm:^5.21.0": + version: 5.22.0 + resolution: "enhanced-resolve@npm:5.22.0" dependencies: graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.3.0" - checksum: 10c0/c6503ee1b2d725843e047e774445ecb12b779aa52db25d11ebe18d4b3adc148d3d993d2038b3d0c38ad836c9c4b3930fbc55df42f72b44785e2f94e5530eda69 + tapable: "npm:^2.3.3" + checksum: 10c0/01d3d7a7628c87f617df7d9a0a34b0f543a2268ac0755a73237d68c3627eb0612f28899343d20b7781a05ebd276069919441e1562cf99171bfcc85924f3d830a languageName: node linkType: hard @@ -3910,129 +4475,40 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/fdc3f87a3f08b3ef98362f37377136c389a0d180fda4b8d073b26ba930cf245521db0a368f119cc7624bc619248fff1439f5811f062d853576f8ffa3df8ee5f1 - languageName: node - linkType: hard - -"esbuild@npm:^0.28.0": - version: 0.28.0 - resolution: "esbuild@npm:0.28.0" - dependencies: - "@esbuild/aix-ppc64": "npm:0.28.0" - "@esbuild/android-arm": "npm:0.28.0" - "@esbuild/android-arm64": "npm:0.28.0" - "@esbuild/android-x64": "npm:0.28.0" - "@esbuild/darwin-arm64": "npm:0.28.0" - "@esbuild/darwin-x64": "npm:0.28.0" - "@esbuild/freebsd-arm64": "npm:0.28.0" - "@esbuild/freebsd-x64": "npm:0.28.0" - "@esbuild/linux-arm": "npm:0.28.0" - "@esbuild/linux-arm64": "npm:0.28.0" - "@esbuild/linux-ia32": "npm:0.28.0" - "@esbuild/linux-loong64": "npm:0.28.0" - "@esbuild/linux-mips64el": "npm:0.28.0" - "@esbuild/linux-ppc64": "npm:0.28.0" - "@esbuild/linux-riscv64": "npm:0.28.0" - "@esbuild/linux-s390x": "npm:0.28.0" - "@esbuild/linux-x64": "npm:0.28.0" - "@esbuild/netbsd-arm64": "npm:0.28.0" - "@esbuild/netbsd-x64": "npm:0.28.0" - "@esbuild/openbsd-arm64": "npm:0.28.0" - "@esbuild/openbsd-x64": "npm:0.28.0" - "@esbuild/openharmony-arm64": "npm:0.28.0" - "@esbuild/sunos-x64": "npm:0.28.0" - "@esbuild/win32-arm64": "npm:0.28.0" - "@esbuild/win32-ia32": "npm:0.28.0" - "@esbuild/win32-x64": "npm:0.28.0" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/8acd95c238ec6c4a9d16163277faf228a8994b642d187b3fe667ffbb469008e6748cde144fdc3c175bf8e78ee49e15a0ed9b9f183fdb5fcea1772f87fb1372a4 + checksum: 10c0/fdc3f87a3f08b3ef98362f37377136c389a0d180fda4b8d073b26ba930cf245521db0a368f119cc7624bc619248fff1439f5811f062d853576f8ffa3df8ee5f1 languageName: node linkType: hard -"esbuild@npm:~0.27.0": - version: 0.27.7 - resolution: "esbuild@npm:0.27.7" - dependencies: - "@esbuild/aix-ppc64": "npm:0.27.7" - "@esbuild/android-arm": "npm:0.27.7" - "@esbuild/android-arm64": "npm:0.27.7" - "@esbuild/android-x64": "npm:0.27.7" - "@esbuild/darwin-arm64": "npm:0.27.7" - "@esbuild/darwin-x64": "npm:0.27.7" - "@esbuild/freebsd-arm64": "npm:0.27.7" - "@esbuild/freebsd-x64": "npm:0.27.7" - "@esbuild/linux-arm": "npm:0.27.7" - "@esbuild/linux-arm64": "npm:0.27.7" - "@esbuild/linux-ia32": "npm:0.27.7" - "@esbuild/linux-loong64": "npm:0.27.7" - "@esbuild/linux-mips64el": "npm:0.27.7" - "@esbuild/linux-ppc64": "npm:0.27.7" - "@esbuild/linux-riscv64": "npm:0.27.7" - "@esbuild/linux-s390x": "npm:0.27.7" - "@esbuild/linux-x64": "npm:0.27.7" - "@esbuild/netbsd-arm64": "npm:0.27.7" - "@esbuild/netbsd-x64": "npm:0.27.7" - "@esbuild/openbsd-arm64": "npm:0.27.7" - "@esbuild/openbsd-x64": "npm:0.27.7" - "@esbuild/openharmony-arm64": "npm:0.27.7" - "@esbuild/sunos-x64": "npm:0.27.7" - "@esbuild/win32-arm64": "npm:0.27.7" - "@esbuild/win32-ia32": "npm:0.27.7" - "@esbuild/win32-x64": "npm:0.27.7" +"esbuild@npm:^0.28.0": + version: 0.28.0 + resolution: "esbuild@npm:0.28.0" + dependencies: + "@esbuild/aix-ppc64": "npm:0.28.0" + "@esbuild/android-arm": "npm:0.28.0" + "@esbuild/android-arm64": "npm:0.28.0" + "@esbuild/android-x64": "npm:0.28.0" + "@esbuild/darwin-arm64": "npm:0.28.0" + "@esbuild/darwin-x64": "npm:0.28.0" + "@esbuild/freebsd-arm64": "npm:0.28.0" + "@esbuild/freebsd-x64": "npm:0.28.0" + "@esbuild/linux-arm": "npm:0.28.0" + "@esbuild/linux-arm64": "npm:0.28.0" + "@esbuild/linux-ia32": "npm:0.28.0" + "@esbuild/linux-loong64": "npm:0.28.0" + "@esbuild/linux-mips64el": "npm:0.28.0" + "@esbuild/linux-ppc64": "npm:0.28.0" + "@esbuild/linux-riscv64": "npm:0.28.0" + "@esbuild/linux-s390x": "npm:0.28.0" + "@esbuild/linux-x64": "npm:0.28.0" + "@esbuild/netbsd-arm64": "npm:0.28.0" + "@esbuild/netbsd-x64": "npm:0.28.0" + "@esbuild/openbsd-arm64": "npm:0.28.0" + "@esbuild/openbsd-x64": "npm:0.28.0" + "@esbuild/openharmony-arm64": "npm:0.28.0" + "@esbuild/sunos-x64": "npm:0.28.0" + "@esbuild/win32-arm64": "npm:0.28.0" + "@esbuild/win32-ia32": "npm:0.28.0" + "@esbuild/win32-x64": "npm:0.28.0" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -4088,7 +4564,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/ccd51f0555708bc9ff4ec9dc3ac92d3daacd45ecaac949ca8645984c5c323bf8cefe98c2df307418685e0b4ce37f9a3bdbfe8e3651fe632a0059a436195a17d4 + checksum: 10c0/8acd95c238ec6c4a9d16163277faf228a8994b642d187b3fe667ffbb469008e6748cde144fdc3c175bf8e78ee49e15a0ed9b9f183fdb5fcea1772f87fb1372a4 languageName: node linkType: hard @@ -4216,21 +4692,27 @@ __metadata: languageName: node linkType: hard -"feed@npm:^5.2.0": - version: 5.2.0 - resolution: "feed@npm:5.2.0" - dependencies: - xml-js: "npm:^1.6.11" - checksum: 10c0/3fabeeb1b5e272cf8a6a6e96605d580ef5af7e9e763d55fa4d610a4198a7c21f04928748e32963f76db37f3510da87effd6614ec0245724aa727305bfd25d42b +"fetchdts@npm:^0.1.6": + version: 0.1.7 + resolution: "fetchdts@npm:0.1.7" + checksum: 10c0/7497671ee28b3e7cc49d037a7c11e6f98e53e6e2abd85f26e8fac3fae4142c3c0d91352dc46198530f73b16480585605c63e3d112c34210ff2c75be1199668a0 languageName: node linkType: hard -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"forwarded-parse@npm:2.1.2": + version: 2.1.2 + resolution: "forwarded-parse@npm:2.1.2" + checksum: 10c0/0c6b4c631775f272b4475e935108635495e8a5b261d1b4a5caef31c47c5a0b04134adc564e655aadfef366a02647fa3ae90a1d3ac19929f3ade47f9bed53036a languageName: node linkType: hard @@ -4476,15 +4958,6 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.7.5": - version: 4.14.0 - resolution: "get-tsconfig@npm:4.14.0" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10c0/abc2b9275468eb589079a0b7a95eb5107c14fdd0ca6dda1bff116fe774ea1f79975421dcb22a0c86b4f820fcc69a7655dddf9b6d6a8a2c06fcb59e19794c0724 - languageName: node - linkType: hard - "github-slugger@npm:^2.0.0": version: 2.0.0 resolution: "github-slugger@npm:2.0.0" @@ -4492,16 +4965,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:^13.0.0": +"glob@npm:^13.0.0, glob@npm:^13.0.6": version: 13.0.6 resolution: "glob@npm:13.0.6" dependencies: @@ -4721,6 +5185,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1": version: 7.0.6 resolution: "https-proxy-agent@npm:7.0.6" @@ -4749,6 +5223,30 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^2.0.0, import-in-the-middle@npm:^2.0.6": + version: 2.0.6 + resolution: "import-in-the-middle@npm:2.0.6" + dependencies: + acorn: "npm:^8.15.0" + acorn-import-attributes: "npm:^1.9.5" + cjs-module-lexer: "npm:^2.2.0" + module-details-from-path: "npm:^1.0.4" + checksum: 10c0/fc70dafe7b3513811fbbc0b281093a257c16d67ace0470e20fb292e5c182a99eb5611a3590d8792ef1f059026f2be5748808e8cba7d618954a92e11f6863f891 + languageName: node + linkType: hard + +"import-in-the-middle@npm:^3.0.0": + version: 3.0.1 + resolution: "import-in-the-middle@npm:3.0.1" + dependencies: + acorn: "npm:^8.15.0" + acorn-import-attributes: "npm:^1.9.5" + cjs-module-lexer: "npm:^2.2.0" + module-details-from-path: "npm:^1.0.4" + checksum: 10c0/afd314edb76764ff53d624e2868f5489a9fb81d22745da3db88121a962f422390b59be86fc5cb1158ed672025ece3b3f8a4943e5dde116bae3dac9f0ff5aff86 + languageName: node + linkType: hard + "inline-style-parser@npm:0.2.7": version: 0.2.7 resolution: "inline-style-parser@npm:0.2.7" @@ -4780,15 +5278,6 @@ __metadata: languageName: node linkType: hard -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: "npm:^2.0.0" - checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 - languageName: node - linkType: hard - "is-decimal@npm:^2.0.0": version: 2.0.1 resolution: "is-decimal@npm:2.0.1" @@ -4796,22 +5285,6 @@ __metadata: languageName: node linkType: hard -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - "is-hexadecimal@npm:^2.0.0": version: 2.0.1 resolution: "is-hexadecimal@npm:2.0.1" @@ -4819,13 +5292,6 @@ __metadata: languageName: node linkType: hard -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - "is-plain-obj@npm:^4.0.0": version: 4.1.0 resolution: "is-plain-obj@npm:4.1.0" @@ -4840,6 +5306,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + "isexe@npm:^4.0.0": version: 4.0.0 resolution: "isexe@npm:4.0.0" @@ -4856,6 +5329,22 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^2.7.0": + version: 2.7.0 + resolution: "jiti@npm:2.7.0" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10c0/1b1e2310a490dce1aeea3da5f5dfe18273516c20ce48be2e98eb8ea452d5f3dcc8fd0cfd6d28b4052a24c5dbab6e3089b2d7e79f0bce7915b10d750929563c42 + languageName: node + linkType: hard + +"jose@npm:6.2.3": + version: 6.2.3 + resolution: "jose@npm:6.2.3" + checksum: 10c0/aa91bccba22cc84d86308f833749bcb0b00441e35c24e0ac79abeac5f76dc62d47bdef9c1da6a0c609f5da6478595f52b252085888b89dbdb163861e40ea4188 + languageName: node + linkType: hard + "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -5019,6 +5508,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + "longest-streak@npm:^3.0.0": version: 3.1.0 resolution: "longest-streak@npm:3.1.0" @@ -5051,7 +5549,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.21": +"magic-string@npm:^0.30.21, magic-string@npm:~0.30.8": version: 0.30.21 resolution: "magic-string@npm:0.30.21" dependencies: @@ -5754,23 +6252,23 @@ __metadata: languageName: node linkType: hard -"miniflare@npm:4.20260415.0": - version: 4.20260415.0 - resolution: "miniflare@npm:4.20260415.0" +"miniflare@npm:4.20260521.0": + version: 4.20260521.0 + resolution: "miniflare@npm:4.20260521.0" dependencies: "@cspotcode/source-map-support": "npm:0.8.1" sharp: "npm:^0.34.5" undici: "npm:7.24.8" - workerd: "npm:1.20260415.1" - ws: "npm:8.18.0" + workerd: "npm:1.20260521.1" + ws: "npm:8.20.1" youch: "npm:4.1.0-beta.10" bin: miniflare: bootstrap.js - checksum: 10c0/73a3517ca3cf933ba3f23574cbbdf1389f81102491caf1594bd842baba3300aa94442f35f815a88d9a17f025a183d3bb880a4fabed1702e1d4f8720f81173335 + checksum: 10c0/c4fc821b6f24f1bf5754b810e5eb70cf4db1c54776cb9e5d5b5b1934a9203b3c139b1e345789c08072b59a2691cd3c7079c5a9d45a5543528bf237fdc295b56c languageName: node linkType: hard -"minimatch@npm:^10.2.2": +"minimatch@npm:^10.2.2, minimatch@npm:^10.2.4": version: 10.2.5 resolution: "minimatch@npm:10.2.5" dependencies: @@ -5855,6 +6353,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3, module-details-from-path@npm:^1.0.4": + version: 1.0.4 + resolution: "module-details-from-path@npm:1.0.4" + checksum: 10c0/10863413e96dab07dee917eae07afe46f7bf853065cc75a7d2a718adf67574857fb64f8a2c0c9af12ac733a9a8cf652db7ed39b95f7a355d08106cb9cc50c83b + languageName: node + linkType: hard + "motion-dom@npm:^12.38.0": version: 12.38.0 resolution: "motion-dom@npm:12.38.0" @@ -5899,12 +6404,12 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.11": - version: 3.3.11 - resolution: "nanoid@npm:3.3.11" +"nanoid@npm:^3.3.12": + version: 3.3.12 + resolution: "nanoid@npm:3.3.12" bin: nanoid: bin/nanoid.cjs - checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + checksum: 10c0/ba142b7b39e11e80c16dd74b0365d407880c87c1cf7e1480956981ae940ee36060fa5b6f092cd1e315184dd19244c657bd017d03327bd3c62247d691c5e8edfb languageName: node linkType: hard @@ -5925,6 +6430,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.6.7": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 12.2.0 resolution: "node-gyp@npm:12.2.0" @@ -5963,13 +6482,6 @@ __metadata: languageName: node linkType: hard -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - "nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -5997,30 +6509,32 @@ __metadata: languageName: node linkType: hard -"oxfmt@npm:0.45.0": - version: 0.45.0 - resolution: "oxfmt@npm:0.45.0" - dependencies: - "@oxfmt/binding-android-arm-eabi": "npm:0.45.0" - "@oxfmt/binding-android-arm64": "npm:0.45.0" - "@oxfmt/binding-darwin-arm64": "npm:0.45.0" - "@oxfmt/binding-darwin-x64": "npm:0.45.0" - "@oxfmt/binding-freebsd-x64": "npm:0.45.0" - "@oxfmt/binding-linux-arm-gnueabihf": "npm:0.45.0" - "@oxfmt/binding-linux-arm-musleabihf": "npm:0.45.0" - "@oxfmt/binding-linux-arm64-gnu": "npm:0.45.0" - "@oxfmt/binding-linux-arm64-musl": "npm:0.45.0" - "@oxfmt/binding-linux-ppc64-gnu": "npm:0.45.0" - "@oxfmt/binding-linux-riscv64-gnu": "npm:0.45.0" - "@oxfmt/binding-linux-riscv64-musl": "npm:0.45.0" - "@oxfmt/binding-linux-s390x-gnu": "npm:0.45.0" - "@oxfmt/binding-linux-x64-gnu": "npm:0.45.0" - "@oxfmt/binding-linux-x64-musl": "npm:0.45.0" - "@oxfmt/binding-openharmony-arm64": "npm:0.45.0" - "@oxfmt/binding-win32-arm64-msvc": "npm:0.45.0" - "@oxfmt/binding-win32-ia32-msvc": "npm:0.45.0" - "@oxfmt/binding-win32-x64-msvc": "npm:0.45.0" +"oxfmt@npm:0.51.0": + version: 0.51.0 + resolution: "oxfmt@npm:0.51.0" + dependencies: + "@oxfmt/binding-android-arm-eabi": "npm:0.51.0" + "@oxfmt/binding-android-arm64": "npm:0.51.0" + "@oxfmt/binding-darwin-arm64": "npm:0.51.0" + "@oxfmt/binding-darwin-x64": "npm:0.51.0" + "@oxfmt/binding-freebsd-x64": "npm:0.51.0" + "@oxfmt/binding-linux-arm-gnueabihf": "npm:0.51.0" + "@oxfmt/binding-linux-arm-musleabihf": "npm:0.51.0" + "@oxfmt/binding-linux-arm64-gnu": "npm:0.51.0" + "@oxfmt/binding-linux-arm64-musl": "npm:0.51.0" + "@oxfmt/binding-linux-ppc64-gnu": "npm:0.51.0" + "@oxfmt/binding-linux-riscv64-gnu": "npm:0.51.0" + "@oxfmt/binding-linux-riscv64-musl": "npm:0.51.0" + "@oxfmt/binding-linux-s390x-gnu": "npm:0.51.0" + "@oxfmt/binding-linux-x64-gnu": "npm:0.51.0" + "@oxfmt/binding-linux-x64-musl": "npm:0.51.0" + "@oxfmt/binding-openharmony-arm64": "npm:0.51.0" + "@oxfmt/binding-win32-arm64-msvc": "npm:0.51.0" + "@oxfmt/binding-win32-ia32-msvc": "npm:0.51.0" + "@oxfmt/binding-win32-x64-msvc": "npm:0.51.0" tinypool: "npm:2.1.0" + peerDependencies: + svelte: ^5.0.0 dependenciesMeta: "@oxfmt/binding-android-arm-eabi": optional: true @@ -6060,22 +6574,25 @@ __metadata: optional: true "@oxfmt/binding-win32-x64-msvc": optional: true + peerDependenciesMeta: + svelte: + optional: true bin: oxfmt: bin/oxfmt - checksum: 10c0/bb839d8a95b56a0e9d8a89104114a609e6ee6631c22434a80d5d682fa4758d69ade81a558172d503ee051196cff5609e2f523d904ffa49db2acd31178ec8f768 + checksum: 10c0/44b896b5c105b4619a34c5d82857a6b3bb87d80946c28dc1388409ab3e14fbfb20c461e450850f4b0b90ba0bc08e163ab4be0d250860217a13f9483cd5dbb047 languageName: node linkType: hard -"oxlint-tsgolint@npm:0.21.1": - version: 0.21.1 - resolution: "oxlint-tsgolint@npm:0.21.1" +"oxlint-tsgolint@npm:0.23.0": + version: 0.23.0 + resolution: "oxlint-tsgolint@npm:0.23.0" dependencies: - "@oxlint-tsgolint/darwin-arm64": "npm:0.21.1" - "@oxlint-tsgolint/darwin-x64": "npm:0.21.1" - "@oxlint-tsgolint/linux-arm64": "npm:0.21.1" - "@oxlint-tsgolint/linux-x64": "npm:0.21.1" - "@oxlint-tsgolint/win32-arm64": "npm:0.21.1" - "@oxlint-tsgolint/win32-x64": "npm:0.21.1" + "@oxlint-tsgolint/darwin-arm64": "npm:0.23.0" + "@oxlint-tsgolint/darwin-x64": "npm:0.23.0" + "@oxlint-tsgolint/linux-arm64": "npm:0.23.0" + "@oxlint-tsgolint/linux-x64": "npm:0.23.0" + "@oxlint-tsgolint/win32-arm64": "npm:0.23.0" + "@oxlint-tsgolint/win32-x64": "npm:0.23.0" dependenciesMeta: "@oxlint-tsgolint/darwin-arm64": optional: true @@ -6091,35 +6608,35 @@ __metadata: optional: true bin: tsgolint: bin/tsgolint.js - checksum: 10c0/7f175543d5d7adf6b5df16735de9105aec6c882e71ccd1b6f337d6bccb681ae3099020992ca0482d8ce0b2e6d0d43ba4201d10e299ba292a468cfdfb24ccaa11 - languageName: node - linkType: hard - -"oxlint@npm:1.60.0": - version: 1.60.0 - resolution: "oxlint@npm:1.60.0" - dependencies: - "@oxlint/binding-android-arm-eabi": "npm:1.60.0" - "@oxlint/binding-android-arm64": "npm:1.60.0" - "@oxlint/binding-darwin-arm64": "npm:1.60.0" - "@oxlint/binding-darwin-x64": "npm:1.60.0" - "@oxlint/binding-freebsd-x64": "npm:1.60.0" - "@oxlint/binding-linux-arm-gnueabihf": "npm:1.60.0" - "@oxlint/binding-linux-arm-musleabihf": "npm:1.60.0" - "@oxlint/binding-linux-arm64-gnu": "npm:1.60.0" - "@oxlint/binding-linux-arm64-musl": "npm:1.60.0" - "@oxlint/binding-linux-ppc64-gnu": "npm:1.60.0" - "@oxlint/binding-linux-riscv64-gnu": "npm:1.60.0" - "@oxlint/binding-linux-riscv64-musl": "npm:1.60.0" - "@oxlint/binding-linux-s390x-gnu": "npm:1.60.0" - "@oxlint/binding-linux-x64-gnu": "npm:1.60.0" - "@oxlint/binding-linux-x64-musl": "npm:1.60.0" - "@oxlint/binding-openharmony-arm64": "npm:1.60.0" - "@oxlint/binding-win32-arm64-msvc": "npm:1.60.0" - "@oxlint/binding-win32-ia32-msvc": "npm:1.60.0" - "@oxlint/binding-win32-x64-msvc": "npm:1.60.0" + checksum: 10c0/052035ea9fe2fe654aa1187ba30f842e1c44883bec34fffbb959dd86b5cfd0067af1bf0c27897b720f28346b3641422672e35913db8940f3e02728e459a1d8f1 + languageName: node + linkType: hard + +"oxlint@npm:1.66.0": + version: 1.66.0 + resolution: "oxlint@npm:1.66.0" + dependencies: + "@oxlint/binding-android-arm-eabi": "npm:1.66.0" + "@oxlint/binding-android-arm64": "npm:1.66.0" + "@oxlint/binding-darwin-arm64": "npm:1.66.0" + "@oxlint/binding-darwin-x64": "npm:1.66.0" + "@oxlint/binding-freebsd-x64": "npm:1.66.0" + "@oxlint/binding-linux-arm-gnueabihf": "npm:1.66.0" + "@oxlint/binding-linux-arm-musleabihf": "npm:1.66.0" + "@oxlint/binding-linux-arm64-gnu": "npm:1.66.0" + "@oxlint/binding-linux-arm64-musl": "npm:1.66.0" + "@oxlint/binding-linux-ppc64-gnu": "npm:1.66.0" + "@oxlint/binding-linux-riscv64-gnu": "npm:1.66.0" + "@oxlint/binding-linux-riscv64-musl": "npm:1.66.0" + "@oxlint/binding-linux-s390x-gnu": "npm:1.66.0" + "@oxlint/binding-linux-x64-gnu": "npm:1.66.0" + "@oxlint/binding-linux-x64-musl": "npm:1.66.0" + "@oxlint/binding-openharmony-arm64": "npm:1.66.0" + "@oxlint/binding-win32-arm64-msvc": "npm:1.66.0" + "@oxlint/binding-win32-ia32-msvc": "npm:1.66.0" + "@oxlint/binding-win32-x64-msvc": "npm:1.66.0" peerDependencies: - oxlint-tsgolint: ">=0.18.0" + oxlint-tsgolint: ">=0.22.1" dependenciesMeta: "@oxlint/binding-android-arm-eabi": optional: true @@ -6164,7 +6681,25 @@ __metadata: optional: true bin: oxlint: bin/oxlint - checksum: 10c0/d12a2f4a6aeba5263e37b28e565b04ba8707eaec7cae53a43f3976771ec019f341fdd0f7fbd089e02c6c135d12a149a07b7162f96c2b3fa702b0642c93aff72f + checksum: 10c0/c43a1141159ef3a32d9d7d49852c9439b9e65dd7c0021ca76f5677f9c0b3a495270f00c2daa2115686997fbf5737a769882bbdeb84276558e0105e6ac6587432 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a languageName: node linkType: hard @@ -6218,6 +6753,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + "path-scurry@npm:^2.0.2": version: 2.0.2 resolution: "path-scurry@npm:2.0.2" @@ -6242,6 +6784,33 @@ __metadata: languageName: node linkType: hard +"pg-int8@npm:1.0.1": + version: 1.0.1 + resolution: "pg-int8@npm:1.0.1" + checksum: 10c0/be6a02d851fc2a4ae3e9de81710d861de3ba35ac927268973eb3cb618873a05b9424656df464dd43bd7dc3fc5295c3f5b3c8349494f87c7af50ec59ef14e0b98 + languageName: node + linkType: hard + +"pg-protocol@npm:*": + version: 1.14.0 + resolution: "pg-protocol@npm:1.14.0" + checksum: 10c0/dccb29b30f5cee8f2ca7dfd17da9eb957174f7a1a25e987e0bfc9fe7640f53dc9fd05c7f3635e7db0c5eefcd41716fffe625f3c1ea9789634d438851b9ce90ae + languageName: node + linkType: hard + +"pg-types@npm:^2.2.0": + version: 2.2.0 + resolution: "pg-types@npm:2.2.0" + dependencies: + pg-int8: "npm:1.0.1" + postgres-array: "npm:~2.0.0" + postgres-bytea: "npm:~1.0.0" + postgres-date: "npm:~1.0.4" + postgres-interval: "npm:^1.1.0" + checksum: 10c0/ab3f8069a323f601cd2d2279ca8c425447dab3f9b61d933b0601d7ffc00d6200df25e26a4290b2b0783b59278198f7dd2ed03e94c4875797919605116a577c65 + languageName: node + linkType: hard + "picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -6249,13 +6818,6 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1": - version: 2.3.2 - resolution: "picomatch@npm:2.3.2" - checksum: 10c0/a554d1709e59be97d1acb9eaedbbc700a5c03dbd4579807baed95100b00420bc729335440ef15004ae2378984e2487a7c1cebd743cfdb72b6fa9ab69223c0d61 - languageName: node - linkType: hard - "picomatch@npm:^4.0.3, picomatch@npm:^4.0.4": version: 4.0.4 resolution: "picomatch@npm:4.0.4" @@ -6263,14 +6825,44 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.5.8": - version: 8.5.10 - resolution: "postcss@npm:8.5.10" +"postcss@npm:^8.5.15": + version: 8.5.15 + resolution: "postcss@npm:8.5.15" dependencies: - nanoid: "npm:^3.3.11" + nanoid: "npm:^3.3.12" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/c592dffa0c4873b401f01955b265538d9942f425040df5e2b8f0ad34c83773a792ea0fa5859ccc99cfb5b955b4ebff118ab7056315388dc83b107b0fa8313576 + checksum: 10c0/7f2e63ae22fbe43aace1bf652bd99da4e90737c64194d49e51ddc9cd0f9e51ff2861a7d734379b494deffa03a880a5c65eec70bc29ee9ebaa7136dde3eee8f31 + languageName: node + linkType: hard + +"postgres-array@npm:~2.0.0": + version: 2.0.0 + resolution: "postgres-array@npm:2.0.0" + checksum: 10c0/cbd56207e4141d7fbf08c86f2aebf21fa7064943d3f808ec85f442ff94b48d891e7a144cc02665fb2de5dbcb9b8e3183a2ac749959e794b4a4cfd379d7a21d08 + languageName: node + linkType: hard + +"postgres-bytea@npm:~1.0.0": + version: 1.0.1 + resolution: "postgres-bytea@npm:1.0.1" + checksum: 10c0/10b28a27c9d703d5befd97c443e62b551096d1014bc59ab574c65bf0688de7f3f068003b2aea8dcff83cf0f6f9a35f9f74457c38856cf8eb81b00cf3fb44f164 + languageName: node + linkType: hard + +"postgres-date@npm:~1.0.4": + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 10c0/0ff91fccc64003e10b767fcfeefb5eaffbc522c93aa65d5051c49b3c4ce6cb93ab091a7d22877a90ad60b8874202c6f1d0f935f38a7235ed3b258efd54b97ca9 + languageName: node + linkType: hard + +"postgres-interval@npm:^1.1.0": + version: 1.2.0 + resolution: "postgres-interval@npm:1.2.0" + dependencies: + xtend: "npm:^4.0.0" + checksum: 10c0/c1734c3cb79e7f22579af0b268a463b1fa1d084e742a02a7a290c4f041e349456f3bee3b4ee0bb3f226828597f7b76deb615c1b857db9a742c45520100456272 languageName: node linkType: hard @@ -6290,6 +6882,13 @@ __metadata: languageName: node linkType: hard +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: 10c0/1697e07cb1068055dbe9fe858d242368ff5d2073639e652b75a7eb1f2a1a8d4afd404d719de23c7b48481a6aa0040686310e2dac2f53d776daa2176d3f96369c + languageName: node + linkType: hard + "property-information@npm:^7.0.0": version: 7.1.0 resolution: "property-information@npm:7.1.0" @@ -6297,14 +6896,21 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:19.2.5": - version: 19.2.5 - resolution: "react-dom@npm:19.2.5" +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"react-dom@npm:19.2.6": + version: 19.2.6 + resolution: "react-dom@npm:19.2.6" dependencies: scheduler: "npm:^0.27.0" peerDependencies: - react: ^19.2.5 - checksum: 10c0/8067606e9f58e4c2e8cb5f09570217dbc71c4843ebcaa20ae2085912d3e3a351f17d8f7c1713313cdda7f272840c8c34ff6c860fcb840862071bceea218e0c63 + react: ^19.2.6 + checksum: 10c0/dbf2aef67857c03a612bc9316a4562e5066f43fa04bf28f7f0734963fc1350da2c9f8eb973930655453281079f30cc8222bab383dbec4b5097084e2c081e3334 languageName: node linkType: hard @@ -6359,10 +6965,10 @@ __metadata: languageName: node linkType: hard -"react@npm:19.2.5": - version: 19.2.5 - resolution: "react@npm:19.2.5" - checksum: 10c0/4b5f231dbef92886f602533c9ce3bde04d99f0e71dfb5d794c43e02726efaad0421c08688f75fc98a6d6e1dc017372e1af7abbfecdc86a79968f461675931a7a +"react@npm:19.2.6": + version: 19.2.6 + resolution: "react@npm:19.2.6" + checksum: 10c0/66afde33b9a9ee87b1e1cae39d8e7e040d1262e719524fd70660c4d4ce79929c532ac19fc3df5a911edaf02768fdf2c49de4ede1ba99bc6aad72796e0e26e798 languageName: node linkType: hard @@ -6373,15 +6979,6 @@ __metadata: languageName: node linkType: hard -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: "npm:^2.2.1" - checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b - languageName: node - linkType: hard - "recma-build-jsx@npm:^1.0.0": version: 1.0.0 resolution: "recma-build-jsx@npm:1.0.0" @@ -6551,6 +7148,16 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^8.0.0": + version: 8.0.1 + resolution: "require-in-the-middle@npm:8.0.1" + dependencies: + debug: "npm:^4.3.5" + module-details-from-path: "npm:^1.0.3" + checksum: 10c0/4b3d29adfff873585dceffa9ddb8f33bb6599001ddff758503e0e5ade2ae6d20d691314125bb13679fa75a19893338e11953d4702dd2fea181e95c0f8316b29b + languageName: node + linkType: hard + "reselect@npm:^5.1.1": version: 5.1.1 resolution: "reselect@npm:5.1.1" @@ -6558,34 +7165,27 @@ __metadata: languageName: node linkType: hard -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab - languageName: node - linkType: hard - -"rolldown@npm:1.0.0-rc.15": - version: 1.0.0-rc.15 - resolution: "rolldown@npm:1.0.0-rc.15" - dependencies: - "@oxc-project/types": "npm:=0.124.0" - "@rolldown/binding-android-arm64": "npm:1.0.0-rc.15" - "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.15" - "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.15" - "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.15" - "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.15" - "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.15" - "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.15" - "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.15" - "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.15" - "@rolldown/pluginutils": "npm:1.0.0-rc.15" +"rolldown@npm:1.0.2": + version: 1.0.2 + resolution: "rolldown@npm:1.0.2" + dependencies: + "@oxc-project/types": "npm:=0.132.0" + "@rolldown/binding-android-arm64": "npm:1.0.2" + "@rolldown/binding-darwin-arm64": "npm:1.0.2" + "@rolldown/binding-darwin-x64": "npm:1.0.2" + "@rolldown/binding-freebsd-x64": "npm:1.0.2" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.2" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.2" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.2" + "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.2" + "@rolldown/binding-linux-s390x-gnu": "npm:1.0.2" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.2" + "@rolldown/binding-linux-x64-musl": "npm:1.0.2" + "@rolldown/binding-openharmony-arm64": "npm:1.0.2" + "@rolldown/binding-wasm32-wasi": "npm:1.0.2" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.2" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.2" + "@rolldown/pluginutils": "npm:^1.0.0" dependenciesMeta: "@rolldown/binding-android-arm64": optional: true @@ -6618,8 +7218,49 @@ __metadata: "@rolldown/binding-win32-x64-msvc": optional: true bin: - rolldown: bin/cli.mjs - checksum: 10c0/95df21125dafd2a0ce6ae9a89d926540e47900684023126c84632e18123371020da8f6b3235a188c45af0e4f9a5b963235de33bd9658ee5db9f3ff5862200eed + rolldown: ./bin/cli.mjs + checksum: 10c0/628327a6e3122c0b62880f1c87d54095394e5138a6af2e6e7b2f67ef4c4b11f1421db68c9a5bb4e1be161465a863ab4f68f15076ce895cd4bb3d0ba18a3b20b1 + languageName: node + linkType: hard + +"rosie-skills-darwin-arm64@npm:0.6.4": + version: 0.6.4 + resolution: "rosie-skills-darwin-arm64@npm:0.6.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"rosie-skills-freebsd-x64@npm:0.6.4": + version: 0.6.4 + resolution: "rosie-skills-freebsd-x64@npm:0.6.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"rosie-skills-linux-x64@npm:0.6.4": + version: 0.6.4 + resolution: "rosie-skills-linux-x64@npm:0.6.4" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"rosie-skills@npm:^0.6.3": + version: 0.6.4 + resolution: "rosie-skills@npm:0.6.4" + dependencies: + rosie-skills-darwin-arm64: "npm:0.6.4" + rosie-skills-freebsd-x64: "npm:0.6.4" + rosie-skills-linux-x64: "npm:0.6.4" + dependenciesMeta: + rosie-skills-darwin-arm64: + optional: true + rosie-skills-freebsd-x64: + optional: true + rosie-skills-linux-x64: + optional: true + bin: + rosie-skills: dist/bin.js + checksum: 10c0/870a60c34bebed05d8783afcbdfa61715f1c97b66132c6a7b218c921f12a18ceee0d216e38e2840ce7c5a0e4638945ff1023758d4254e5c40cf8f405dde86605 languageName: node linkType: hard @@ -6637,13 +7278,6 @@ __metadata: languageName: node linkType: hard -"sax@npm:^1.2.4": - version: 1.6.0 - resolution: "sax@npm:1.6.0" - checksum: 10c0/e5593f4a91eb25761a688c4d96902e4e95a0dd6017bc65146b6f21236e3d715cf893333b76bc758923c9574c2fb5a7a76c3a81e96ea15432f2624f906c027c1e - languageName: node - linkType: hard - "scheduler@npm:^0.27.0": version: 0.27.0 resolution: "scheduler@npm:0.27.0" @@ -6678,19 +7312,19 @@ __metadata: languageName: node linkType: hard -"seroval-plugins@npm:^1.5.0": - version: 1.5.2 - resolution: "seroval-plugins@npm:1.5.2" +"seroval-plugins@npm:^1.5.4": + version: 1.5.4 + resolution: "seroval-plugins@npm:1.5.4" peerDependencies: seroval: ^1.0 - checksum: 10c0/feccb47f269c3d378979b835e5bada25a1f34fd811aae99e2c5f8ec65c6b06286627d6fdc5855a89f060aeba799d615da583b6b18e51a5d0f6e161dd8105cb95 + checksum: 10c0/f8843ff12c2fcbf0d1124d02addcffc1a727f55b500ac24218a528e95e540c42052e2e6f6b3dfaad2aa8105fd0985dff722c3ae774723b9899e0fafe7d4698be languageName: node linkType: hard -"seroval@npm:^1.5.0": - version: 1.5.2 - resolution: "seroval@npm:1.5.2" - checksum: 10c0/6efe24fc00aa667408214d890fe5ff316bf120ea2239278051bce86c9beaeac2c6692020316ccbc32f7daf74bbffa0f27f3a3e5190d82e089180009cab590bbf +"seroval@npm:^1.5.4": + version: 1.5.4 + resolution: "seroval@npm:1.5.4" + checksum: 10c0/6191e27f21000f7693ab923fde69c47a3ce5fbb86e585e5a8fc072d70db52ebc3c4dab83c3b2ab67311ec646b2064df089a3a155c49b21846438aaf510d4b964 languageName: node linkType: hard @@ -6896,24 +7530,24 @@ __metadata: languageName: node linkType: hard -"tailwind-merge@npm:^3.5.0": +"tailwind-merge@npm:3.5.0, tailwind-merge@npm:^3.5.0": version: 3.5.0 resolution: "tailwind-merge@npm:3.5.0" checksum: 10c0/4dc588f5b5296ba3f38e1ebb41f02b6d24a8c5bb45e44b33748c118fb4b5767dd0efc464431ca3e75404056b618b5f67bec3708158baa65fed8a2fc9201e0c53 languageName: node linkType: hard -"tailwindcss@npm:4.2.2": - version: 4.2.2 - resolution: "tailwindcss@npm:4.2.2" - checksum: 10c0/6eae8a125c35d504ba6c518d26ec64fba694ff4a9ab9b9cd9883050128e0b7afdf491388c472d9bed2624664c1c7d4a133d19b653151a6b52e6ce6953168a857 +"tailwindcss@npm:4.3.0": + version: 4.3.0 + resolution: "tailwindcss@npm:4.3.0" + checksum: 10c0/4cde389ee5e9132e7ef90e4c1d05978d52821761a00700c18b7d46d325881086f0a9c9ec7f616929ecd6e26109c41913538883e066c6dd4bd993debbbbc99084 languageName: node linkType: hard -"tapable@npm:^2.3.0": - version: 2.3.2 - resolution: "tapable@npm:2.3.2" - checksum: 10c0/45ec8bd8963907f35bba875f9b3e9a5afa5ba11a9a4e4a2d7b2313d983cb2741386fd7dd3e54b13055b2be942971aac369d197e02263ec9216c59c0a8069ed7f +"tapable@npm:^2.3.3": + version: 2.3.3 + resolution: "tapable@npm:2.3.3" + checksum: 10c0/47992e861053f861154e92fb4a98ac4ab47b6463717e60792dd1e8c755da0c4964cd8bb68c308a9066d6da89000b6310457b4d5d985c30de4ccc29066068cc17 languageName: node linkType: hard @@ -6954,12 +7588,10 @@ __metadata: languageName: node linkType: hard -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 languageName: node linkType: hard @@ -6984,22 +7616,6 @@ __metadata: languageName: node linkType: hard -"tsx@npm:^4.19.2": - version: 4.21.0 - resolution: "tsx@npm:4.21.0" - dependencies: - esbuild: "npm:~0.27.0" - fsevents: "npm:~2.3.3" - get-tsconfig: "npm:^4.7.5" - dependenciesMeta: - fsevents: - optional: true - bin: - tsx: dist/cli.mjs - checksum: 10c0/f5072923cd8459a1f9a26df87823a2ab5754641739d69df2a20b415f61814322b751fa6be85db7c6ec73cf68ba8fac2fd1cfc76bdb0aa86ded984d84d5d2126b - languageName: node - linkType: hard - "typescript@npm:6.0.3": version: 6.0.3 resolution: "typescript@npm:6.0.3" @@ -7027,10 +7643,17 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~6.21.0": - version: 6.21.0 - resolution: "undici-types@npm:6.21.0" - checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 +"undici-types@npm:>=7.24.0 <7.24.7": + version: 7.24.6 + resolution: "undici-types@npm:7.24.6" + checksum: 10c0/d9cd8befb643ac904615c280a095ba4240531f6bb4a5e75a22a7483630ca8d3f1016d2ab6ace6ceda1f63b3a2db2fe037fafe121d6917a0187573aa548ff78ca + languageName: node + linkType: hard + +"undici-types@npm:~7.16.0": + version: 7.16.0 + resolution: "undici-types@npm:7.16.0" + checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a languageName: node linkType: hard @@ -7139,15 +7762,14 @@ __metadata: languageName: node linkType: hard -"unplugin@npm:^2.1.2": - version: 2.3.11 - resolution: "unplugin@npm:2.3.11" +"unplugin@npm:^3.0.0": + version: 3.0.0 + resolution: "unplugin@npm:3.0.0" dependencies: "@jridgewell/remapping": "npm:^2.3.5" - acorn: "npm:^8.15.0" picomatch: "npm:^4.0.3" webpack-virtual-modules: "npm:^0.6.2" - checksum: 10c0/273c1eab0eca4470c7317428689295c31dbe8ab0b306504de9f03cd20c156debb4131bef24b27ac615862958c5dd950a3951d26c0723ea774652ab3624149cff + checksum: 10c0/9b3a9eb7c1cfaab677160b9659b008b4562e08360b6c715f31bdd7692738a75de91f217931032ec247979f71e83d4c9b908245cf47d984b26fb318b60b1d2d36 languageName: node linkType: hard @@ -7235,19 +7857,19 @@ __metadata: languageName: node linkType: hard -"vite@npm:^8.0.8": - version: 8.0.8 - resolution: "vite@npm:8.0.8" +"vite@npm:8.0.14": + version: 8.0.14 + resolution: "vite@npm:8.0.14" dependencies: fsevents: "npm:~2.3.3" lightningcss: "npm:^1.32.0" picomatch: "npm:^4.0.4" - postcss: "npm:^8.5.8" - rolldown: "npm:1.0.0-rc.15" - tinyglobby: "npm:^0.2.15" + postcss: "npm:^8.5.15" + rolldown: "npm:1.0.2" + tinyglobby: "npm:^0.2.16" peerDependencies: "@types/node": ^20.19.0 || >=22.12.0 - "@vitejs/devtools": ^0.1.0 + "@vitejs/devtools": ^0.1.18 esbuild: ^0.27.0 || ^0.28.0 jiti: ">=1.21.0" less: ^4.0.0 @@ -7288,7 +7910,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/63474b399612ccf087d0aa025d7eb5c0d675012b6257b7f64332ff39579d4af4d5d7f0ac330906fc99b101abbf592c756adf143bb5748a02aec08f7d3639054d + checksum: 10c0/1ff99b4daadc64aed5f9e40387ecf39fd3bca45c1a5c4fa4aa82197de901930f0507af8d75c54715e2744c99575913947efb625653a78ef6df3997c5613970bd languageName: node linkType: hard @@ -7311,6 +7933,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + "webpack-virtual-modules@npm:^0.6.2": version: 0.6.2 resolution: "webpack-virtual-modules@npm:0.6.2" @@ -7322,33 +7951,38 @@ __metadata: version: 0.0.0-use.local resolution: "webview-bundle-website@workspace:." dependencies: - "@base-ui/react": "npm:1.4.0" - "@cloudflare/vite-plugin": "npm:^1.32.3" - "@date-fns/tz": "npm:^1.4.1" - "@fontsource-variable/jetbrains-mono": "npm:^5.2.8" - "@fontsource/inter": "npm:^5.2.8" - "@tailwindcss/vite": "npm:^4.2.2" - "@tanstack/react-router": "npm:1.168.23" - "@tanstack/react-start": "npm:1.167.42" + "@base-ui/react": "npm:1.5.0" + "@cloudflare/vite-plugin": "npm:1.38.0" + "@date-fns/tz": "npm:1.5.0" + "@fontsource-variable/inter": "npm:5.2.8" + "@fontsource-variable/jetbrains-mono": "npm:5.2.8" + "@sentry/cloudflare": "npm:10.53.1" + "@sentry/tanstackstart-react": "npm:10.53.1" + "@sentry/vite-plugin": "npm:5.3.0" + "@tailwindcss/vite": "npm:4.3.0" + "@tanstack/react-router": "npm:1.170.8" + "@tanstack/react-start": "npm:1.168.11" "@types/mdx": "npm:2.0.13" - "@types/node": "npm:^22" - "@types/react": "npm:^19.2.14" - "@types/react-dom": "npm:^19.2.3" - "@vitejs/plugin-react": "npm:^6.0.1" - date-fns: "npm:^4.1.0" - feed: "npm:^5.2.0" + "@types/node": "npm:^24" + "@types/react": "npm:19.2.15" + "@types/react-dom": "npm:19.2.3" + "@vitejs/plugin-react": "npm:6.0.2" + clsx: "npm:2.1.1" + date-fns: "npm:4.3.0" fumadocs-core: "npm:16.7.16" fumadocs-mdx: "npm:14.3.0" fumadocs-ui: "npm:16.7.16" - oxfmt: "npm:0.45.0" - oxlint: "npm:1.60.0" - oxlint-tsgolint: "npm:0.21.1" - react: "npm:19.2.5" - react-dom: "npm:19.2.5" - tailwindcss: "npm:4.2.2" + jose: "npm:6.2.3" + oxfmt: "npm:0.51.0" + oxlint: "npm:1.66.0" + oxlint-tsgolint: "npm:0.23.0" + react: "npm:19.2.6" + react-dom: "npm:19.2.6" + tailwind-merge: "npm:3.5.0" + tailwindcss: "npm:4.3.0" typescript: "npm:6.0.3" - vite: "npm:^8.0.8" - wrangler: "npm:4.83.0" + vite: "npm:8.0.14" + wrangler: "npm:4.94.0" languageName: unknown linkType: soft @@ -7368,6 +8002,27 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + "which@npm:^6.0.0": version: 6.0.1 resolution: "which@npm:6.0.1" @@ -7379,15 +8034,15 @@ __metadata: languageName: node linkType: hard -"workerd@npm:1.20260415.1": - version: 1.20260415.1 - resolution: "workerd@npm:1.20260415.1" +"workerd@npm:1.20260521.1": + version: 1.20260521.1 + resolution: "workerd@npm:1.20260521.1" dependencies: - "@cloudflare/workerd-darwin-64": "npm:1.20260415.1" - "@cloudflare/workerd-darwin-arm64": "npm:1.20260415.1" - "@cloudflare/workerd-linux-64": "npm:1.20260415.1" - "@cloudflare/workerd-linux-arm64": "npm:1.20260415.1" - "@cloudflare/workerd-windows-64": "npm:1.20260415.1" + "@cloudflare/workerd-darwin-64": "npm:1.20260521.1" + "@cloudflare/workerd-darwin-arm64": "npm:1.20260521.1" + "@cloudflare/workerd-linux-64": "npm:1.20260521.1" + "@cloudflare/workerd-linux-arm64": "npm:1.20260521.1" + "@cloudflare/workerd-windows-64": "npm:1.20260521.1" dependenciesMeta: "@cloudflare/workerd-darwin-64": optional: true @@ -7401,25 +8056,26 @@ __metadata: optional: true bin: workerd: bin/workerd - checksum: 10c0/aab5517ecff1e58a6005b83163df7f4775e72c6d6d0cd008c02c0424160c6228d3b0b38e85c302e2e05ac6bf7c1c379ec5c236fc5ba5e98712b29d17bfdb3378 + checksum: 10c0/32b82042118e221e915369a418af29f539b5fe162c2b10a3f881bde58c75c4ffccdbb5e2b254ffa5f5a8725498a9238ab7abb17b5ada611314d5f0965f844975 languageName: node linkType: hard -"wrangler@npm:4.83.0": - version: 4.83.0 - resolution: "wrangler@npm:4.83.0" +"wrangler@npm:4.94.0": + version: 4.94.0 + resolution: "wrangler@npm:4.94.0" dependencies: - "@cloudflare/kv-asset-handler": "npm:0.4.2" - "@cloudflare/unenv-preset": "npm:2.16.0" + "@cloudflare/kv-asset-handler": "npm:0.5.0" + "@cloudflare/unenv-preset": "npm:2.16.1" blake3-wasm: "npm:2.1.5" esbuild: "npm:0.27.3" fsevents: "npm:~2.3.2" - miniflare: "npm:4.20260415.0" + miniflare: "npm:4.20260521.0" path-to-regexp: "npm:6.3.0" + rosie-skills: "npm:^0.6.3" unenv: "npm:2.0.0-rc.24" - workerd: "npm:1.20260415.1" + workerd: "npm:1.20260521.1" peerDependencies: - "@cloudflare/workers-types": ^4.20260415.1 + "@cloudflare/workers-types": ^4.20260521.1 dependenciesMeta: fsevents: optional: true @@ -7429,13 +8085,13 @@ __metadata: bin: wrangler: bin/wrangler.js wrangler2: bin/wrangler.js - checksum: 10c0/e10f8dfd88a546a345c2fe36ac5d42a433897e48e72d068ae6e748f69235f6c659da8e7354f7beb5219fdcfcc25276cc6822122d0a145c7866d8be5b6dd465af + checksum: 10c0/205c1a77d3162c41b814751ed378fddc82695f90cdf49cb692768cb1ede4f2ee2ac6f65ccfa3c1c273ebbdcfe24d2994203f7381446d20d278d7e6c02fc2af29 languageName: node linkType: hard -"ws@npm:8.18.0": - version: 8.18.0 - resolution: "ws@npm:8.18.0" +"ws@npm:8.20.1": + version: 8.20.1 + resolution: "ws@npm:8.20.1" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -7444,18 +8100,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10c0/25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 - languageName: node - linkType: hard - -"xml-js@npm:^1.6.11": - version: 1.6.11 - resolution: "xml-js@npm:1.6.11" - dependencies: - sax: "npm:^1.2.4" - bin: - xml-js: ./bin/cli.js - checksum: 10c0/c83631057f10bf90ea785cee434a8a1a0030c7314fe737ad9bf568a281083b565b28b14c9e9ba82f11fc9dc582a3a907904956af60beb725be1c9ad4b030bc5a + checksum: 10c0/ce162433218399cdedeb76fd33363d4d86a7d910058d4e3c679dce08cea65d6da6b39f11baa4d7808d024cf46ed88f6a05c17611621aaad8fc5e62edacc30c5d languageName: node linkType: hard @@ -7471,6 +8116,13 @@ __metadata: languageName: node linkType: hard +"xtend@npm:^4.0.0": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard + "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -7492,6 +8144,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + "youch-core@npm:^0.3.3": version: 0.3.3 resolution: "youch-core@npm:0.3.3" @@ -7515,13 +8174,6 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.24.2": - version: 3.25.76 - resolution: "zod@npm:3.25.76" - checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c - languageName: node - linkType: hard - "zod@npm:^4.3.6": version: 4.3.6 resolution: "zod@npm:4.3.6" @@ -7529,6 +8181,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^4.4.3": + version: 4.4.3 + resolution: "zod@npm:4.4.3" + checksum: 10c0/7ea31b558e88f9faf44f31dd185e2e1cbf51fed3081787fb96cc2534749b50c0acfc6da7f0922a7353ed092dd358c7d50c28ea96c94d04af64191bd33152eca3 + languageName: node + linkType: hard + "zwitch@npm:^2.0.0, zwitch@npm:^2.0.4": version: 2.0.4 resolution: "zwitch@npm:2.0.4"