@bugboom/mcp 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 BugBoom
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,202 @@
1
- # Temporary Holding Version
1
+ # @bugboom/mcp
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ An [MCP](https://modelcontextprotocol.io) server for [BugBoom](https://bugboom.io): AI agents (Claude Code,
4
+ Cursor, Claude Desktop and other MCP clients) read, write, run and fix BugBoom end-to-end tests. When a step
5
+ fails the agent gets the error, the screenshot, a DOM snapshot of the page as it was and the console errors
6
+ and failed requests of that step, finds a working selector or the right expected value, edits the step and
7
+ runs the test again.
8
+
9
+ Two ways in:
10
+
11
+ - **Hosted, with a sign-in** — nothing to install and no key: add the server by its URL, and the client opens
12
+ BugBoom in the browser the first time; you sign in, pick the organization and allow access (read only, or
13
+ editing tests and starting runs too). The dev stand serves it at `https://mcp.bugboom.dev/mcp`.
14
+ - **Local, with an API key** — Node.js 20 or newer, one file, no dependencies: `npx -y @bugboom/mcp` with an
15
+ organization API key (BugBoom → Organization settings → API keys): `api:read` for the read tools, `api:full`
16
+ to edit tests and start runs.
17
+
18
+ Either way the tools work on the tests, components, suites and variables of one organization, with the rights
19
+ of the member who signed in or made the key.
20
+
21
+ ## Connect the hosted server
22
+
23
+ ```bash
24
+ claude mcp add --transport http bugboom https://mcp.bugboom.dev/mcp # then /mcp in Claude Code → bugboom → Authenticate
25
+ ```
26
+
27
+ - **Cursor** (`.cursor/mcp.json`): `{ "mcpServers": { "bugboom": { "url": "https://mcp.bugboom.dev/mcp" } } }`
28
+ - **VS Code** (`.vscode/mcp.json`): `{ "servers": { "bugboom": { "type": "http", "url": "https://mcp.bugboom.dev/mcp" } } }`
29
+ - **claude.ai, Claude Desktop**: Settings → Connectors → Add custom connector, the URL above.
30
+
31
+ The agents you connected are listed in BugBoom (project → Settings → Integrations → MCP), where you disconnect
32
+ them; an agent also loses access when you leave the organization.
33
+
34
+ ## Connect with an API key
35
+
36
+ ### Claude Code
37
+
38
+ ```bash
39
+ claude mcp add bugboom -e BUGBOOM_API_KEY=bb_… -- npx -y @bugboom/mcp
40
+ # for every project of yours: --scope user; shared with the repository (.mcp.json): --scope project
41
+ ```
42
+
43
+ ### Cursor
44
+
45
+ `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project):
46
+
47
+ ```json
48
+ {
49
+ "mcpServers": {
50
+ "bugboom": {
51
+ "command": "npx",
52
+ "args": ["-y", "@bugboom/mcp"],
53
+ "env": { "BUGBOOM_API_KEY": "bb_…" }
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ ### Claude Desktop
60
+
61
+ Settings → Developer → Edit Config (`~/Library/Application Support/Claude/claude_desktop_config.json` on
62
+ macOS, `%APPDATA%\Claude\claude_desktop_config.json` on Windows), then restart Claude Desktop:
63
+
64
+ ```json
65
+ {
66
+ "mcpServers": {
67
+ "bugboom": {
68
+ "command": "npx",
69
+ "args": ["-y", "@bugboom/mcp"],
70
+ "env": { "BUGBOOM_API_KEY": "bb_…" }
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ### A local or self-hosted BugBoom
77
+
78
+ Add `BUGBOOM_API_URL` next to the key, e.g. `http://localhost:8280/api/public/v1` (default
79
+ `https://app.bugboom.io/api/public/v1`); with Claude Code: `-e BUGBOOM_API_URL=…`.
80
+
81
+ ### HTTP mode
82
+
83
+ One server for several clients or people: Streamable HTTP at `/mcp`, stateless; every request brings its
84
+ own key in `Authorization: Bearer <key>` (or `X-API-Key`), `BUGBOOM_API_KEY` is not used — or, hosted (below),
85
+ an OAuth access token.
86
+
87
+ ```bash
88
+ npx -y @bugboom/mcp --http --port 8310 # http://127.0.0.1:8310/mcp
89
+ npx -y @bugboom/mcp --http --host 0.0.0.0 # other machines too (put TLS in front of it)
90
+ ```
91
+
92
+ ```bash
93
+ claude mcp add --transport http bugboom http://localhost:8310/mcp --header "Authorization: Bearer bb_…"
94
+ ```
95
+
96
+ ```json
97
+ { "mcpServers": { "bugboom": { "url": "http://localhost:8310/mcp", "headers": { "Authorization": "Bearer bb_…" } } } }
98
+ ```
99
+
100
+ `GET /health` answers `{status: "ok", version}`. Bound to a loopback address the server only answers
101
+ requests addressed to localhost (no DNS rebinding); a request without a key gets `401`.
102
+
103
+ ### Hosting it with the OAuth sign-in
104
+
105
+ `--public-url` (or `BUGBOOM_MCP_PUBLIC_URL`) is the address the clients reach the server at; with it the server
106
+ is an OAuth protected resource (RFC 9728) of BugBoom's authorization server — the issuer is
107
+ `--authorization-server` / `BUGBOOM_AUTHORIZATION_SERVER`, by default the origin of the API URL:
108
+
109
+ ```bash
110
+ BUGBOOM_API_URL=https://app.bugboom.dev/api/public/v1 \
111
+ npx -y @bugboom/mcp --http --host 0.0.0.0 --public-url https://mcp.bugboom.dev # TLS in front of it
112
+ ```
113
+
114
+ - `GET /.well-known/oauth-protected-resource/mcp` (and without `/mcp`): the resource metadata —
115
+ `{resource: "https://mcp.bugboom.dev/mcp", authorization_servers: ["https://app.bugboom.dev"], scopes_supported:
116
+ ["api:read", "api:full"]}`. BugBoom's metadata (`/.well-known/oauth-authorization-server`) names the rest:
117
+ dynamic client registration, the consent page, the token endpoint (authorization code with PKCE S256,
118
+ refresh tokens), the JWKS.
119
+ - A request without a credential: `401` with `WWW-Authenticate: Bearer resource_metadata="…", scope="…"` — what
120
+ the clients start the sign-in from.
121
+ - An access token (a JWT) is checked here first — the RS256 signature against BugBoom's JWKS, its lifetime,
122
+ a public API scope — so that an expired one is a `401 error="invalid_token"` the client refreshes; then it goes
123
+ to the public API, which checks it again (revoked, the member gone). A token is refused 2 minutes before its
124
+ `exp`, so that it never expires during a call: the public API's 401 would reach the client as a tool error, not
125
+ as a 401 it refreshes on. API keys work as before.
126
+ - Public by design: any origin (CORS), no DNS rebinding check, and `wait_for_run` waits at most 90 s per call
127
+ (proxies such as Cloudflare drop a request that stays silent for 100 s; the agent calls it again).
128
+ - Docker: `packages/mcp/Dockerfile` (from the repository root), port 8310, `/health`.
129
+
130
+ ## Tools
131
+
132
+ | Tool | |
133
+ |---|---|
134
+ | `get_settings` | the test settings of the key's organization (home URL, browser, timeouts, waiting conditions, selectors, capture of DOM and logs, visual regression, the country cloud runs start from…), counts, test folders and run profiles |
135
+ | `list_tests`, `get_test` | tests (`externalId`: the tests with exactly this id of another system); a test by id or exact name with its groups and steps (compact; `raw: true` for the API answer) |
136
+ | `list_components`, `list_suites`, `list_variables` | components, suites, variables (secrets without values) |
137
+ | `create_variable`, `update_variable` | saved variables |
138
+ | `create_test`, `update_test`, `delete_test` | tests (`labelIds`: the labels a test carries; an update replaces them; `externalId`: its id in another system, also on steps) |
139
+ | `list_test_folders`, `create_test_folder`, `update_test_folder`, `delete_test_folder` | test folders: the tree, a new one, rename / move / reorder, delete (its tests and subfolders move up, no test is deleted) |
140
+ | `list_labels`, `create_label`, `update_label`, `delete_label` | labels of the tests: by name with `testsCount`, a new one, rename / recolour, delete (taken off its tests, no test is deleted); `list_tests` `labelIds` finds the tests with any of them |
141
+ | `add_group`, `insert_component`, `update_test_group`, `remove_group`, `convert_group_to_component` | groups of a test and components |
142
+ | `create_steps`, `update_step`, `move_step`, `delete_step` | steps; a `selector` (CSS or XPath) is enough for the element, `selectorsPresets` for the full form |
143
+ | `run_test`, `run_suite` | start a cloud run (profile, variables) |
144
+ | `get_run`, `wait_for_run`, `stop_run` | a run's state; wait for the end with progress notifications (default 300 s, then `timedOut: true`) |
145
+ | `get_failed_step` | error, computed expected / actual values, conditions, whether there is a DOM snapshot and a screenshot |
146
+ | `query_dom_snapshot` | CSS / XPath against the page of the failed step: up to 20 matches with their XPath and HTML; or the HTML itself |
147
+ | `get_step_screenshot` | the screenshot after the step, as an image |
148
+ | `get_run_emails` | the emails the run's inbox received (`{{inboxEmail}}`): from, subject, text and links |
149
+ | `get_run_logs` | the run's browser console (`console.*`, uncaught errors, browser messages) or network log (method, URL, status, type, duration, size, failure; headers with `includeHeaders`), by step (`stepRunId`), console `level` or `failedOnly` requests; each entry has the `stepIndex` and `tabNo` it happened in |
150
+
151
+ Writes are sent with `X-BugBoom-Source: agent`: BugBoom shows the steps as made by an agent. Runs started by
152
+ the server are sent with `triggeredBy: "agent"` and show as started by an agent. Tool errors (a refused key, a missing scope, a validation error with
153
+ its fields, a name matching several tests) come back as tool results the agent can act on.
154
+
155
+ **Resources:** `bugboom://docs/steps` — the 31 step types with their params, selectors, waiting conditions,
156
+ assertions, HTTP requests and error codes; `bugboom://docs/steps/{type}` — the JSON Schema of a type's params;
157
+ `bugboom://docs/schemas/{selectors-presets|waiting-conditions|step-frame}`. The schemas are the backend's,
158
+ copied into the package when it is built.
159
+
160
+ **Prompt:** `fix-failed-test` (`runId` or `test`) — find why a test failed (the error, the DOM snapshot, the
161
+ screenshot, the console errors and failed requests of the step), fix the selector, the waiting or the
162
+ expectation (or report a real bug), run it again.
163
+
164
+ ## A session
165
+
166
+ ```
167
+ get_test {name: "Signup form — wrong title"} → run_test → wait_for_run (failed)
168
+ get_failed_step → ASSERTION_FAILED: pageTitle equal "Not the title", got "BugBoom Fixture — Form"
169
+ get_run_logs {kind: "console", level: "error", stepRunId} → nothing: the page itself is fine
170
+ query_dom_snapshot {query: "title"} → <title>BugBoom Fixture — Form</title>
171
+ update_step {params: {property: "pageTitle", operator: "equal", expected: "BugBoom Fixture — Form", caseInsensitive: false}}
172
+ run_test → wait_for_run (passed)
173
+ ```
174
+
175
+ **Emails.** Every run has its own address, `{{inboxEmail}}` in steps. A test types it into the app's form and
176
+ an `openInbox` step opens the run's inbox in a new tab, where the next steps click the email and its link;
177
+ `get_run_emails` lets the agent read the same emails (e.g. to check a confirmation link or why none came).
178
+
179
+ ## Security
180
+
181
+ The key — or the access token of a signed-in client — stays in the client's configuration or request: the
182
+ server keeps it in memory only, never writes it to disk or to its log (stderr), and sends it only to the BugBoom
183
+ API (step screenshots are fetched from their presigned URL without it). An access token lives an hour; the
184
+ client renews it with its refresh token (rotated on every use) until the member disconnects it in BugBoom or
185
+ leaves the organization. DOM snapshots are taken by the runner without scripts, styles, event
186
+ handlers, `javascript:` URLs and plugins, with password fields, inputs that look secret and secret variables
187
+ blanked. Run logs never hold request or response bodies; `Authorization`, `Cookie`, `Set-Cookie`,
188
+ `Proxy-Authorization` and headers with token, secret or key in their name are `<redacted>`, and the values of
189
+ secret variables are removed from console texts, URLs and headers.
190
+
191
+ ## Development
192
+
193
+ ```bash
194
+ npm run build -w @bugboom/mcp # dist/bugboom-mcp.mjs (+ THIRD-PARTY-LICENSES.txt)
195
+ npm run sync-step-schemas -w @bugboom/mcp # src/schemas.json from ../bugboom-back-end (the build does it too)
196
+ npx vitest run --project mcp # tools against a mock API; the built server over stdio and HTTP
197
+ BUGBOOM_API_KEY=bb_… BUGBOOM_API_URL=http://localhost:8280/api/public/v1 npx @modelcontextprotocol/inspector node packages/mcp/dist/bugboom-mcp.mjs
198
+ ```
199
+
200
+ ## License
201
+
202
+ MIT, see [LICENSE](LICENSE).
@@ -0,0 +1,289 @@
1
+ Packages bundled into bugboom-mcp.mjs:
2
+
3
+ @hono/node-server@2.1.5 (MIT)
4
+
5
+ MIT License
6
+
7
+ Copyright (c) 2022 - present, Yusuke Wada and Hono contributors
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
27
+ ------------------------------------------------------------------------
28
+
29
+ @modelcontextprotocol/sdk@1.32.1 (MIT)
30
+
31
+ MIT License
32
+
33
+ Copyright (c) 2024 Anthropic, PBC
34
+
35
+ Permission is hereby granted, free of charge, to any person obtaining a copy
36
+ of this software and associated documentation files (the "Software"), to deal
37
+ in the Software without restriction, including without limitation the rights
38
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39
+ copies of the Software, and to permit persons to whom the Software is
40
+ furnished to do so, subject to the following conditions:
41
+
42
+ The above copyright notice and this permission notice shall be included in all
43
+ copies or substantial portions of the Software.
44
+
45
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
+ SOFTWARE.
52
+
53
+ ------------------------------------------------------------------------
54
+
55
+ ajv@8.20.0 (MIT)
56
+
57
+ The MIT License (MIT)
58
+
59
+ Copyright (c) 2015-2021 Evgeny Poberezkin
60
+
61
+ Permission is hereby granted, free of charge, to any person obtaining a copy
62
+ of this software and associated documentation files (the "Software"), to deal
63
+ in the Software without restriction, including without limitation the rights
64
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
65
+ copies of the Software, and to permit persons to whom the Software is
66
+ furnished to do so, subject to the following conditions:
67
+
68
+ The above copyright notice and this permission notice shall be included in all
69
+ copies or substantial portions of the Software.
70
+
71
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
72
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
73
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
74
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
75
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
76
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
77
+ SOFTWARE.
78
+
79
+ ------------------------------------------------------------------------
80
+
81
+ ajv-formats@3.0.1 (MIT)
82
+
83
+ MIT License
84
+
85
+ Copyright (c) 2020 Evgeny Poberezkin
86
+
87
+ Permission is hereby granted, free of charge, to any person obtaining a copy
88
+ of this software and associated documentation files (the "Software"), to deal
89
+ in the Software without restriction, including without limitation the rights
90
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
91
+ copies of the Software, and to permit persons to whom the Software is
92
+ furnished to do so, subject to the following conditions:
93
+
94
+ The above copyright notice and this permission notice shall be included in all
95
+ copies or substantial portions of the Software.
96
+
97
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
98
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
99
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
100
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
101
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
102
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
103
+ SOFTWARE.
104
+
105
+ ------------------------------------------------------------------------
106
+
107
+ content-type@1.0.5 (MIT)
108
+
109
+ (The MIT License)
110
+
111
+ Copyright (c) 2015 Douglas Christopher Wilson
112
+
113
+ Permission is hereby granted, free of charge, to any person obtaining
114
+ a copy of this software and associated documentation files (the
115
+ 'Software'), to deal in the Software without restriction, including
116
+ without limitation the rights to use, copy, modify, merge, publish,
117
+ distribute, sublicense, and/or sell copies of the Software, and to
118
+ permit persons to whom the Software is furnished to do so, subject to
119
+ the following conditions:
120
+
121
+ The above copyright notice and this permission notice shall be
122
+ included in all copies or substantial portions of the Software.
123
+
124
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
125
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
126
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
127
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
128
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
129
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
130
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
131
+
132
+ ------------------------------------------------------------------------
133
+
134
+ fast-deep-equal@3.1.3 (MIT)
135
+
136
+ MIT License
137
+
138
+ Copyright (c) 2017 Evgeny Poberezkin
139
+
140
+ Permission is hereby granted, free of charge, to any person obtaining a copy
141
+ of this software and associated documentation files (the "Software"), to deal
142
+ in the Software without restriction, including without limitation the rights
143
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
144
+ copies of the Software, and to permit persons to whom the Software is
145
+ furnished to do so, subject to the following conditions:
146
+
147
+ The above copyright notice and this permission notice shall be included in all
148
+ copies or substantial portions of the Software.
149
+
150
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
151
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
152
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
153
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
154
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
155
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
156
+ SOFTWARE.
157
+
158
+ ------------------------------------------------------------------------
159
+
160
+ fast-uri@3.1.9 (BSD-3-Clause)
161
+
162
+ Copyright (c) 2011-2021, Gary Court until https://github.com/garycourt/uri-js/commit/a1acf730b4bba3f1097c9f52e7d9d3aba8cdcaae
163
+ Copyright (c) 2021-present The Fastify team <https://github.com/fastify/fastify#team>
164
+ All rights reserved.
165
+
166
+ Redistribution and use in source and binary forms, with or without
167
+ modification, are permitted provided that the following conditions are met:
168
+ * Redistributions of source code must retain the above copyright
169
+ notice, this list of conditions and the following disclaimer.
170
+ * Redistributions in binary form must reproduce the above copyright
171
+ notice, this list of conditions and the following disclaimer in the
172
+ documentation and/or other materials provided with the distribution.
173
+ * The names of any contributors may not be used to endorse or promote
174
+ products derived from this software without specific prior written
175
+ permission.
176
+
177
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
178
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
179
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
180
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
181
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
182
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
183
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
184
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
185
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
186
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
187
+
188
+ * * *
189
+
190
+ The complete list of contributors can be found at:
191
+ - https://github.com/garycourt/uri-js/graphs/contributors
192
+
193
+ ------------------------------------------------------------------------
194
+
195
+ hono@4.13.13 (MIT)
196
+
197
+ MIT License
198
+
199
+ Copyright (c) 2021 - present, Yusuke Wada and Hono contributors
200
+
201
+ Permission is hereby granted, free of charge, to any person obtaining a copy
202
+ of this software and associated documentation files (the "Software"), to deal
203
+ in the Software without restriction, including without limitation the rights
204
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
205
+ copies of the Software, and to permit persons to whom the Software is
206
+ furnished to do so, subject to the following conditions:
207
+
208
+ The above copyright notice and this permission notice shall be included in all
209
+ copies or substantial portions of the Software.
210
+
211
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
212
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
213
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
214
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
215
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
216
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
217
+ SOFTWARE.
218
+
219
+ ------------------------------------------------------------------------
220
+
221
+ json-schema-traverse@1.0.0 (MIT)
222
+
223
+ MIT License
224
+
225
+ Copyright (c) 2017 Evgeny Poberezkin
226
+
227
+ Permission is hereby granted, free of charge, to any person obtaining a copy
228
+ of this software and associated documentation files (the "Software"), to deal
229
+ in the Software without restriction, including without limitation the rights
230
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
231
+ copies of the Software, and to permit persons to whom the Software is
232
+ furnished to do so, subject to the following conditions:
233
+
234
+ The above copyright notice and this permission notice shall be included in all
235
+ copies or substantial portions of the Software.
236
+
237
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
238
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
239
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
240
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
241
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
242
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
243
+ SOFTWARE.
244
+
245
+ ------------------------------------------------------------------------
246
+
247
+ zod@4.6.7 (MIT)
248
+
249
+ MIT License
250
+
251
+ Copyright (c) 2025 Colin McDonnell
252
+
253
+ Permission is hereby granted, free of charge, to any person obtaining a copy
254
+ of this software and associated documentation files (the "Software"), to deal
255
+ in the Software without restriction, including without limitation the rights
256
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
257
+ copies of the Software, and to permit persons to whom the Software is
258
+ furnished to do so, subject to the following conditions:
259
+
260
+ The above copyright notice and this permission notice shall be included in all
261
+ copies or substantial portions of the Software.
262
+
263
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
264
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
265
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
266
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
267
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
268
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
269
+ SOFTWARE.
270
+
271
+ ------------------------------------------------------------------------
272
+
273
+ zod-to-json-schema@3.25.2 (ISC)
274
+
275
+ ISC License
276
+
277
+ Copyright (c) 2020, Stefan Terdell
278
+
279
+ Permission to use, copy, modify, and/or distribute this software for any
280
+ purpose with or without fee is hereby granted, provided that the above
281
+ copyright notice and this permission notice appear in all copies.
282
+
283
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
284
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
285
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
286
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
287
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
288
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
289
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.