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 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
- ## Status
14
-
15
- **Full surface live.** All 13 tools shipped + a setup wizard
16
- that generates ready-to-paste config snippets for 5 AI tools.
17
- Roadmap context lives in
18
- [`docs/PLAN_AI_INTEGRATION_ROADMAP.md`](https://git.imprezahost.com/impreza/impreza-platform/-/blob/main/docs/PLAN_AI_INTEGRATION_ROADMAP.md)
19
- of the impreza-platform repo.
20
-
21
- | Tool | Wraps |
22
- |------|-------|
23
- | `impreza_list_servers` | `GET /v1/platform/servers` |
24
- | `impreza_list_apps` | `GET /v1/platform/apps` |
25
- | `impreza_list_deployments` | `GET /v1/platform/deployments` + `/custom` (merged) |
26
- | `impreza_deploy_custom` | `POST /v1/platform/deployments/custom` (3 modes) |
27
- | `impreza_deploy_catalog_app` | `POST /v1/platform/deployments` |
28
- | `impreza_uninstall_deployment` | `POST .../uninstall` |
29
- | `impreza_get_logs` | `POST .../logs` (sync tail, last N lines) |
30
- | `impreza_restart_deployment` | `POST .../restart` |
31
- | `impreza_add_onion` | `POST .../onion/add` |
32
- | `impreza_change_domain` | `POST .../domain` |
33
- | `impreza_git_webhook_status` | `GET .../custom/{id}/git-webhook` |
34
- | `impreza_git_webhook_connect` | `POST .../custom/{id}/git-webhook/connect` |
35
- | `impreza_git_webhook_disconnect` | `POST .../custom/{id}/git-webhook/disconnect` |
36
-
37
- ## Install + setup
38
-
39
- ### Prerequisites
40
-
41
- - Node 20
42
- - An Impreza Host account with an API key + secret
43
- (clientarea API Keys; the IP of the machine running this MCP
44
- server must be whitelisted under the key)
45
-
46
- ### One-shot via `npx`
47
-
48
- No global install needed — `npx impreza-mcp` works.
49
-
50
- ### Or install globally
51
-
52
- ```sh
53
- npm install -g impreza-mcp
54
- ```
55
-
56
- ### Get a ready-to-paste config snippet
57
-
58
- The fastest path: ask the binary itself.
59
-
60
- ```sh
61
- npx impreza-mcp setup --tool claude-code
62
- # also: cursor | continue | zed | codex-cli
63
- ```
64
-
65
- The wizard prints the JSON block to drop into your AI tool's MCP
66
- config + the exact file path + the post-config step (usually "fully
67
- quit + re-open the AI tool"). It does NOT write to disk — paste it
68
- yourself so you don't accidentally clobber an existing config with
69
- other MCP servers.
70
-
71
- ### Or wire it in manually
72
-
73
- **Claude Code** add to `~/Library/Application Support/Claude/claude_desktop_config.json`
74
- (macOS) or `%APPDATA%/Claude/claude_desktop_config.json` (Windows):
75
-
76
- ```json
77
- {
78
- "mcpServers": {
79
- "impreza": {
80
- "command": "npx",
81
- "args": ["-y", "impreza-mcp"],
82
- "env": {
83
- "IMPREZA_API_KEY": "imp_...",
84
- "IMPREZA_API_SECRET": "..."
85
- }
86
- }
87
- }
88
- }
89
- ```
90
-
91
- Restart Claude Code. The tools appear under the MCP icon.
92
-
93
- **Cursor** — add to `~/.cursor/mcp.json` (same shape as above).
94
-
95
- **Continue** add to `~/.continue/config.json`:
96
-
97
- ```json
98
- {
99
- "experimental": {
100
- "modelContextProtocolServers": [
101
- {
102
- "transport": {
103
- "type": "stdio",
104
- "command": "npx",
105
- "args": ["-y", "impreza-mcp"],
106
- "env": {
107
- "IMPREZA_API_KEY": "imp_...",
108
- "IMPREZA_API_SECRET": "..."
109
- }
110
- }
111
- }
112
- ]
113
- }
114
- }
115
- ```
116
-
117
- **Zed** — add to your settings:
118
-
119
- ```json
120
- {
121
- "context_servers": {
122
- "impreza": {
123
- "command": {
124
- "path": "npx",
125
- "args": ["-y", "impreza-mcp"],
126
- "env": {
127
- "IMPREZA_API_KEY": "imp_...",
128
- "IMPREZA_API_SECRET": "..."
129
- }
130
- }
131
- }
132
- }
133
- }
134
- ```
135
-
136
- ## Usage in chat
137
-
138
- After setup, talk to your AI naturally:
139
-
140
- > *"List my Impreza servers."* → calls `impreza_list_servers`
141
- >
142
- > *"Deploy this directory to my Impreza VPS, expose via .onion."* →
143
- > packages the cwd as a Dockerfile-mode custom deploy, uploads, deploys
144
- > with `onion=true`, reports the .onion address.
145
- >
146
- > *"What apps are running on my agent?"* → calls
147
- > `impreza_list_deployments` filtered to the right server.
148
-
149
- ## Auth + security
150
-
151
- `IMPREZA_API_KEY` + `IMPREZA_API_SECRET` live in the AI tool's MCP
152
- config env — not in any file on disk owned by `impreza-mcp` itself.
153
- The MCP server holds the secret only in memory and only attaches it
154
- as HTTP request headers.
155
-
156
- The IP of the machine running this MCP server (almost always your
157
- laptop) must be on the API key's whitelist. Manage the whitelist in
158
- your Impreza clientarea.
159
-
160
- ## Build
161
-
162
- ```sh
163
- npm install
164
- npm run build
165
- # dist/server.js is the entry point
166
- ```
167
-
168
- ## License
169
-
170
- MIT — see `LICENSE`.
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`)
@@ -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"}
@@ -0,0 +1 @@
1
+ export declare function runLogin(argv: readonly string[]): Promise<never>;