@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 +21 -0
- package/README.md +201 -2
- package/dist/THIRD-PARTY-LICENSES.txt +289 -0
- package/dist/bugboom-mcp.mjs +48645 -0
- package/package.json +39 -4
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
|
-
#
|
|
1
|
+
# @bugboom/mcp
|
|
2
2
|
|
|
3
|
-
|
|
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.
|