impreza-mcp 0.2.1 → 0.4.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 -21
- package/README.md +201 -170
- package/dist/client.d.ts +12 -0
- package/dist/client.js +27 -0
- package/dist/client.js.map +1 -1
- package/dist/credentials.d.ts +11 -0
- package/dist/credentials.js +53 -0
- package/dist/credentials.js.map +1 -0
- package/dist/login.d.ts +1 -0
- package/dist/login.js +130 -0
- package/dist/login.js.map +1 -0
- package/dist/server.js +415 -0
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Impreza Host
|
|
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.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Impreza Host
|
|
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,170 +1,201 @@
|
|
|
1
|
-
# impreza-mcp
|
|
2
|
-
|
|
3
|
-
[Model Context Protocol](https://modelcontextprotocol.io) server for
|
|
4
|
-
[Impreza Host](https://imprezahost.com). Lets AI coding tools (Claude
|
|
5
|
-
Code, Cursor, Codex CLI, Continue, Zed, ...) deploy customer-built
|
|
6
|
-
apps to managed Impreza VPSes without leaving the chat.
|
|
7
|
-
|
|
8
|
-
When you say "deploy this for me" to Claude with this MCP server
|
|
9
|
-
loaded, Claude calls `impreza_deploy_custom` directly — packages your
|
|
10
|
-
project, uploads it, builds + runs on your Impreza VPS, and reports
|
|
11
|
-
back the URL.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
|
28
|
-
|
|
29
|
-
|
|
|
30
|
-
| `
|
|
31
|
-
| `
|
|
32
|
-
| `
|
|
33
|
-
| `
|
|
34
|
-
| `
|
|
35
|
-
| `
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
1
|
+
# impreza-mcp
|
|
2
|
+
|
|
3
|
+
[Model Context Protocol](https://modelcontextprotocol.io) server for
|
|
4
|
+
[Impreza Host](https://imprezahost.com). Lets AI coding tools (Claude
|
|
5
|
+
Code, Cursor, Codex CLI, Continue, Zed, ...) deploy customer-built
|
|
6
|
+
apps to managed Impreza VPSes without leaving the chat.
|
|
7
|
+
|
|
8
|
+
When you say "deploy this for me" to Claude with this MCP server
|
|
9
|
+
loaded, Claude calls `impreza_deploy_custom` directly — packages your
|
|
10
|
+
project, uploads it, builds + runs on your Impreza VPS, and reports
|
|
11
|
+
back the URL.
|
|
12
|
+
|
|
13
|
+
> **No-install alternative:** if your AI client supports remote MCP
|
|
14
|
+
> connectors (e.g. Claude), you can skip this package and add the hosted
|
|
15
|
+
> connector `https://mcp.imprezahost.com/mcp` instead — authorize in your
|
|
16
|
+
> Impreza clientarea, no API key and no IP whitelist. It exposes the same
|
|
17
|
+
> full toolset, gated by the scopes you grant on consent (read / deploy /
|
|
18
|
+
> manage). Install this package when you want a local server — e.g. to deploy
|
|
19
|
+
> a project folder straight from your machine, which the hosted connector can't.
|
|
20
|
+
|
|
21
|
+
## Status
|
|
22
|
+
|
|
23
|
+
**Full surface live.** All 31 tools shipped — app deployment (14) plus
|
|
24
|
+
account + crypto balance, domains/DNS, and VPS lifecycle (17) — with a setup
|
|
25
|
+
wizard that generates ready-to-paste config snippets for 5 AI tools.
|
|
26
|
+
|
|
27
|
+
| Tool | Wraps |
|
|
28
|
+
|------|-------|
|
|
29
|
+
| **Apps & deployments** | |
|
|
30
|
+
| `impreza_list_servers` | `GET /v1/platform/servers` |
|
|
31
|
+
| `impreza_list_apps` | `GET /v1/platform/apps` |
|
|
32
|
+
| `impreza_list_deployments` | `GET /v1/platform/deployments` + `/custom` (merged) |
|
|
33
|
+
| `impreza_deploy_custom` | `POST /v1/platform/deployments/custom` (3 modes) |
|
|
34
|
+
| `impreza_deploy_catalog_app` | `POST /v1/platform/deployments` |
|
|
35
|
+
| `impreza_uninstall_deployment` | `POST .../uninstall` |
|
|
36
|
+
| `impreza_get_logs` | `POST .../logs` (sync tail, last N lines) |
|
|
37
|
+
| `impreza_restart_deployment` | `POST .../restart` |
|
|
38
|
+
| `impreza_redeploy_deployment` | `POST .../custom/{id}/redeploy` (in-place rebuild, same domain) |
|
|
39
|
+
| `impreza_add_onion` | `POST .../onion/add` |
|
|
40
|
+
| `impreza_change_domain` | `POST .../domain` |
|
|
41
|
+
| `impreza_git_webhook_status` | `GET .../custom/{id}/git-webhook` |
|
|
42
|
+
| `impreza_git_webhook_connect` | `POST .../custom/{id}/git-webhook/connect` |
|
|
43
|
+
| `impreza_git_webhook_disconnect` | `POST .../custom/{id}/git-webhook/disconnect` |
|
|
44
|
+
| **Account & balance** | |
|
|
45
|
+
| `impreza_account_info` | `GET /v1/account` |
|
|
46
|
+
| `impreza_list_services` | `GET /v1/account/services` |
|
|
47
|
+
| `impreza_topup` | `POST /v1/account/topup` — top up in BTC / XMR / USDT / TRX |
|
|
48
|
+
| `impreza_topup_status` | `GET /v1/account/topup/{invoice_id}` |
|
|
49
|
+
| **Domains & DNS** | |
|
|
50
|
+
| `impreza_domain_check` | `GET /v1/domains/check` |
|
|
51
|
+
| `impreza_domain_details` | `GET /v1/domains/{domain}` |
|
|
52
|
+
| `impreza_list_dns` | `GET /v1/domains/{domain}/dns` |
|
|
53
|
+
| `impreza_add_dns_record` | `POST /v1/domains/{domain}/dns` |
|
|
54
|
+
| `impreza_update_dns_record` | `PUT /v1/domains/{domain}/dns` |
|
|
55
|
+
| `impreza_delete_dns_record` | `DELETE /v1/domains/{domain}/dns` |
|
|
56
|
+
| `impreza_set_nameservers` | `PUT /v1/domains/{domain}/nameservers` |
|
|
57
|
+
| **VPS lifecycle** (Proxmox) | |
|
|
58
|
+
| `impreza_vps_status` | `GET /v1/vps/proxmox/{id}/status` |
|
|
59
|
+
| `impreza_vps_power` | `POST /v1/vps/proxmox/{id}/{start\|shutdown\|reboot\|stop}` |
|
|
60
|
+
| `impreza_vps_list_backups` | `GET /v1/vps/proxmox/{id}/backups` |
|
|
61
|
+
| `impreza_vps_create_backup` | `POST /v1/vps/proxmox/{id}/backups` |
|
|
62
|
+
| `impreza_vps_list_templates` | `GET /v1/vps/proxmox/{id}/templates` |
|
|
63
|
+
| `impreza_vps_reinstall` | `POST /v1/vps/proxmox/{id}/reinstall` — destructive (wipes) |
|
|
64
|
+
|
|
65
|
+
## Install + setup
|
|
66
|
+
|
|
67
|
+
### Prerequisites
|
|
68
|
+
|
|
69
|
+
- Node ≥ 20
|
|
70
|
+
- An Impreza Host account with an API key + secret (clientarea →
|
|
71
|
+
Impreza API). The key's IP factor is per-key: `whitelist` (default —
|
|
72
|
+
add this machine's IP), `tofu` (trust-on-first-use — auto-pins the
|
|
73
|
+
first IP), or `keyonly` (no IP factor)
|
|
74
|
+
|
|
75
|
+
### One-shot via `npx`
|
|
76
|
+
|
|
77
|
+
No global install needed — `npx impreza-mcp` works.
|
|
78
|
+
|
|
79
|
+
### Or install globally
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
npm install -g impreza-mcp
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Get a ready-to-paste config snippet
|
|
86
|
+
|
|
87
|
+
The fastest path: ask the binary itself.
|
|
88
|
+
|
|
89
|
+
```sh
|
|
90
|
+
npx impreza-mcp setup --tool claude-code
|
|
91
|
+
# also: cursor | continue | zed | codex-cli
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The wizard prints the JSON block to drop into your AI tool's MCP
|
|
95
|
+
config + the exact file path + the post-config step (usually "fully
|
|
96
|
+
quit + re-open the AI tool"). It does NOT write to disk — paste it
|
|
97
|
+
yourself so you don't accidentally clobber an existing config with
|
|
98
|
+
other MCP servers.
|
|
99
|
+
|
|
100
|
+
### Or wire it in manually
|
|
101
|
+
|
|
102
|
+
**Claude Code** — add to `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
103
|
+
(macOS) or `%APPDATA%/Claude/claude_desktop_config.json` (Windows):
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"mcpServers": {
|
|
108
|
+
"impreza": {
|
|
109
|
+
"command": "npx",
|
|
110
|
+
"args": ["-y", "impreza-mcp"],
|
|
111
|
+
"env": {
|
|
112
|
+
"IMPREZA_API_KEY": "imp_...",
|
|
113
|
+
"IMPREZA_API_SECRET": "..."
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Restart Claude Code. The tools appear under the MCP icon.
|
|
121
|
+
|
|
122
|
+
**Cursor** — add to `~/.cursor/mcp.json` (same shape as above).
|
|
123
|
+
|
|
124
|
+
**Continue** — add to `~/.continue/config.json`:
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"experimental": {
|
|
129
|
+
"modelContextProtocolServers": [
|
|
130
|
+
{
|
|
131
|
+
"transport": {
|
|
132
|
+
"type": "stdio",
|
|
133
|
+
"command": "npx",
|
|
134
|
+
"args": ["-y", "impreza-mcp"],
|
|
135
|
+
"env": {
|
|
136
|
+
"IMPREZA_API_KEY": "imp_...",
|
|
137
|
+
"IMPREZA_API_SECRET": "..."
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Zed** — add to your settings:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"context_servers": {
|
|
151
|
+
"impreza": {
|
|
152
|
+
"command": {
|
|
153
|
+
"path": "npx",
|
|
154
|
+
"args": ["-y", "impreza-mcp"],
|
|
155
|
+
"env": {
|
|
156
|
+
"IMPREZA_API_KEY": "imp_...",
|
|
157
|
+
"IMPREZA_API_SECRET": "..."
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Usage in chat
|
|
166
|
+
|
|
167
|
+
After setup, talk to your AI naturally:
|
|
168
|
+
|
|
169
|
+
> *"List my Impreza servers."* → calls `impreza_list_servers`
|
|
170
|
+
>
|
|
171
|
+
> *"Deploy this directory to my Impreza VPS, expose via .onion."* →
|
|
172
|
+
> packages the cwd as a Dockerfile-mode custom deploy, uploads, deploys
|
|
173
|
+
> with `onion=true`, reports the .onion address.
|
|
174
|
+
>
|
|
175
|
+
> *"What apps are running on my agent?"* → calls
|
|
176
|
+
> `impreza_list_deployments` filtered to the right server.
|
|
177
|
+
|
|
178
|
+
## Auth + security
|
|
179
|
+
|
|
180
|
+
`IMPREZA_API_KEY` + `IMPREZA_API_SECRET` live in the AI tool's MCP
|
|
181
|
+
config env — not in any file on disk owned by `impreza-mcp` itself.
|
|
182
|
+
The MCP server holds the secret only in memory and only attaches it
|
|
183
|
+
as HTTP request headers.
|
|
184
|
+
|
|
185
|
+
The API key's IP second factor is per-key: leave it on `whitelist` and
|
|
186
|
+
add this machine's IP, or pick `tofu` (auto-pins the first IP) or
|
|
187
|
+
`keyonly` (no IP factor) in your Impreza clientarea — so the whitelist
|
|
188
|
+
step is now optional. Tokens issued via the hosted OAuth connector are
|
|
189
|
+
scoped and revocable under clientarea → Impreza API → Connected Apps.
|
|
190
|
+
|
|
191
|
+
## Build
|
|
192
|
+
|
|
193
|
+
```sh
|
|
194
|
+
npm install
|
|
195
|
+
npm run build
|
|
196
|
+
# dist/server.js is the entry point
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## License
|
|
200
|
+
|
|
201
|
+
MIT — see `LICENSE`.
|
package/dist/client.d.ts
CHANGED
|
@@ -22,6 +22,18 @@ export declare class ImprezaClient {
|
|
|
22
22
|
* as envelope.
|
|
23
23
|
*/
|
|
24
24
|
post<T>(path: string, body: unknown): Promise<T>;
|
|
25
|
+
/**
|
|
26
|
+
* Authenticated JSON PUT. Mirrors post() — body JSON-stringified, response
|
|
27
|
+
* decoded as the standard envelope. Used by the DNS-record / nameserver
|
|
28
|
+
* update tools.
|
|
29
|
+
*/
|
|
30
|
+
put<T>(path: string, body: unknown): Promise<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Authenticated DELETE, optionally with a JSON body. Some endpoints (e.g.
|
|
33
|
+
* DNS record removal) identify the target in the request body rather than
|
|
34
|
+
* the path. Response decoded as the standard envelope.
|
|
35
|
+
*/
|
|
36
|
+
del<T>(path: string, body?: unknown): Promise<T>;
|
|
25
37
|
/**
|
|
26
38
|
* Authenticated POST with raw binary body. Used for the Phase 12
|
|
27
39
|
* context upload (`POST /v1/platform/deployments/custom/contexts`)
|
package/dist/client.js
CHANGED
|
@@ -50,6 +50,33 @@ export class ImprezaClient {
|
|
|
50
50
|
});
|
|
51
51
|
return this.parseEnvelope(res);
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Authenticated JSON PUT. Mirrors post() — body JSON-stringified, response
|
|
55
|
+
* decoded as the standard envelope. Used by the DNS-record / nameserver
|
|
56
|
+
* update tools.
|
|
57
|
+
*/
|
|
58
|
+
async put(path, body) {
|
|
59
|
+
const res = await this.fetch(new URL(this.baseURL + path), {
|
|
60
|
+
method: 'PUT',
|
|
61
|
+
headers: { 'Content-Type': 'application/json' },
|
|
62
|
+
body: JSON.stringify(body ?? {}),
|
|
63
|
+
});
|
|
64
|
+
return this.parseEnvelope(res);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Authenticated DELETE, optionally with a JSON body. Some endpoints (e.g.
|
|
68
|
+
* DNS record removal) identify the target in the request body rather than
|
|
69
|
+
* the path. Response decoded as the standard envelope.
|
|
70
|
+
*/
|
|
71
|
+
async del(path, body) {
|
|
72
|
+
const init = { method: 'DELETE' };
|
|
73
|
+
if (body !== undefined) {
|
|
74
|
+
init.headers = { 'Content-Type': 'application/json' };
|
|
75
|
+
init.body = JSON.stringify(body);
|
|
76
|
+
}
|
|
77
|
+
const res = await this.fetch(new URL(this.baseURL + path), init);
|
|
78
|
+
return this.parseEnvelope(res);
|
|
79
|
+
}
|
|
53
80
|
/**
|
|
54
81
|
* Authenticated POST with raw binary body. Used for the Phase 12
|
|
55
82
|
* context upload (`POST /v1/platform/deployments/custom/contexts`)
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface StoredCredentials {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
apiSecret: string;
|
|
4
|
+
baseURL?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function credentialsDir(): string;
|
|
7
|
+
export declare function credentialsPath(): string;
|
|
8
|
+
/** Load stored credentials, or null when absent / unreadable / malformed. */
|
|
9
|
+
export declare function loadStoredCredentials(): StoredCredentials | null;
|
|
10
|
+
/** Write credentials 0600 under ~/.impreza (created 0700). Returns the path. */
|
|
11
|
+
export declare function saveCredentials(creds: StoredCredentials): string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Local credential store for device-pairing (Tier 1).
|
|
2
|
+
//
|
|
3
|
+
// `impreza-mcp login --code …` exchanges a pairing code for an API key and
|
|
4
|
+
// writes it here so the MCP server can authenticate WITHOUT the secret ever
|
|
5
|
+
// being pasted into a tool config by hand. The file is created 0600 (owner
|
|
6
|
+
// read/write only) under ~/.impreza; the env vars still win when set, so the
|
|
7
|
+
// manual `setup` path is unaffected. (A future hardening step can move this
|
|
8
|
+
// into the OS keychain — Keychain / Credential Manager / libsecret.)
|
|
9
|
+
import { homedir } from 'node:os';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { mkdirSync, readFileSync, writeFileSync, chmodSync } from 'node:fs';
|
|
12
|
+
export function credentialsDir() {
|
|
13
|
+
return join(homedir(), '.impreza');
|
|
14
|
+
}
|
|
15
|
+
export function credentialsPath() {
|
|
16
|
+
return join(credentialsDir(), 'credentials.json');
|
|
17
|
+
}
|
|
18
|
+
/** Load stored credentials, or null when absent / unreadable / malformed. */
|
|
19
|
+
export function loadStoredCredentials() {
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(readFileSync(credentialsPath(), 'utf8'));
|
|
22
|
+
if (parsed &&
|
|
23
|
+
typeof parsed === 'object' &&
|
|
24
|
+
typeof parsed.apiKey === 'string' &&
|
|
25
|
+
typeof parsed.apiSecret === 'string') {
|
|
26
|
+
const rec = parsed;
|
|
27
|
+
const out = { apiKey: rec.apiKey, apiSecret: rec.apiSecret };
|
|
28
|
+
if (typeof rec.baseURL === 'string') {
|
|
29
|
+
out.baseURL = rec.baseURL;
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// absent / unreadable / not JSON → treat as "no stored credentials"
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/** Write credentials 0600 under ~/.impreza (created 0700). Returns the path. */
|
|
40
|
+
export function saveCredentials(creds) {
|
|
41
|
+
mkdirSync(credentialsDir(), { recursive: true, mode: 0o700 });
|
|
42
|
+
const path = credentialsPath();
|
|
43
|
+
writeFileSync(path, JSON.stringify(creds, null, 2) + '\n', { mode: 0o600 });
|
|
44
|
+
try {
|
|
45
|
+
// writeFileSync's mode is not applied to a pre-existing file; force it.
|
|
46
|
+
chmodSync(path, 0o600);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// best-effort — Windows ignores POSIX modes (ACL-based instead)
|
|
50
|
+
}
|
|
51
|
+
return path;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,qEAAqE;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAQ5E,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACpD,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5E,IACE,MAAM;YACN,OAAO,MAAM,KAAK,QAAQ;YAC1B,OAAQ,MAAkC,CAAC,MAAM,KAAK,QAAQ;YAC9D,OAAQ,MAAkC,CAAC,SAAS,KAAK,QAAQ,EACjE,CAAC;YACD,MAAM,GAAG,GAAG,MAAiC,CAAC;YAC9C,MAAM,GAAG,GAAsB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAgB,EAAE,SAAS,EAAE,GAAG,CAAC,SAAmB,EAAE,CAAC;YACpG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACpC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,SAAS,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,wEAAwE;QACxE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/login.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runLogin(argv: readonly string[]): Promise<never>;
|