@1claw/cli 0.34.1 → 0.34.2
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/README.md +63 -1
- package/dist/src/commands/daemon.d.ts +3 -0
- package/dist/src/commands/daemon.d.ts.map +1 -0
- package/dist/src/commands/daemon.js +347 -0
- package/dist/src/commands/daemon.js.map +1 -0
- package/dist/src/commands/local.d.ts +3 -0
- package/dist/src/commands/local.d.ts.map +1 -0
- package/dist/src/commands/local.js +505 -0
- package/dist/src/commands/local.js.map +1 -0
- package/dist/src/commands/setup.d.ts.map +1 -1
- package/dist/src/commands/setup.js +88 -1
- package/dist/src/commands/setup.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/local-policy.d.ts +39 -0
- package/dist/src/local-policy.d.ts.map +1 -0
- package/dist/src/local-policy.js +123 -0
- package/dist/src/local-policy.js.map +1 -0
- package/dist/src/local-vault.d.ts +39 -0
- package/dist/src/local-vault.d.ts.map +1 -0
- package/dist/src/local-vault.js +166 -0
- package/dist/src/local-vault.js.map +1 -0
- package/dist/src/secret-proxy.d.ts +27 -0
- package/dist/src/secret-proxy.d.ts.map +1 -0
- package/dist/src/secret-proxy.js +73 -0
- package/dist/src/secret-proxy.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @1claw/cli (v0.34.
|
|
1
|
+
# @1claw/cli (v0.34.2)
|
|
2
2
|
|
|
3
3
|
Command-line interface for [1Claw](https://1claw.xyz) — HSM-backed secret management for AI agents and humans.
|
|
4
4
|
|
|
@@ -506,6 +506,68 @@ Manage registered mobile companion app devices.
|
|
|
506
506
|
1claw config set output-format json # Set default output
|
|
507
507
|
```
|
|
508
508
|
|
|
509
|
+
## Local Vault (Offline, Encrypted)
|
|
510
|
+
|
|
511
|
+
Store secrets locally in an encrypted vault — no cloud required. Secrets are encrypted at rest with AES-256-GCM using a passphrase-derived key (PBKDF2, 100k iterations).
|
|
512
|
+
|
|
513
|
+
```bash
|
|
514
|
+
1claw local init # Create local vault with passphrase
|
|
515
|
+
1claw local add STRIPE_KEY # Add secret (prompted, masked)
|
|
516
|
+
1claw local list # List secret names (never values)
|
|
517
|
+
1claw local get STRIPE_KEY # Retrieve a value
|
|
518
|
+
1claw local rm STRIPE_KEY # Remove a secret
|
|
519
|
+
1claw local import .env # Import .env file into local vault
|
|
520
|
+
1claw local export -o .env # Export as .env format
|
|
521
|
+
1claw local sync -v <vault-id> # Push local secrets to cloud vault
|
|
522
|
+
1claw local sync --pull -v <id> # Pull cloud secrets into local vault
|
|
523
|
+
1claw local status # Show vault info (count, sync status)
|
|
524
|
+
1claw local destroy # Permanently delete local vault
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
Vault file: `~/.config/1claw/local-vault.enc` (0600 permissions, safe to back up).
|
|
528
|
+
|
|
529
|
+
## Local Daemon (Secret Proxy)
|
|
530
|
+
|
|
531
|
+
The daemon serves secrets over a Unix socket and injects them into HTTP requests without exposing values to the AI model. This provides a trust boundary: the model knows *which* secret to use and *where* to send it, but never sees the raw value.
|
|
532
|
+
|
|
533
|
+
```bash
|
|
534
|
+
# Start the daemon (unlocks vault, listens on socket)
|
|
535
|
+
1claw daemon start
|
|
536
|
+
|
|
537
|
+
# Manage per-secret policies (which hosts can receive each secret)
|
|
538
|
+
1claw daemon policy add STRIPE_KEY --hosts api.stripe.com
|
|
539
|
+
1claw daemon policy add OPENAI_KEY --hosts api.openai.com,*.openai.com
|
|
540
|
+
1claw daemon policy list
|
|
541
|
+
1claw daemon policy remove STRIPE_KEY
|
|
542
|
+
|
|
543
|
+
# Check daemon status
|
|
544
|
+
1claw daemon status
|
|
545
|
+
|
|
546
|
+
# Stop the daemon
|
|
547
|
+
1claw daemon stop
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
### Setup for Local Mode
|
|
551
|
+
|
|
552
|
+
Configure AI clients to use the daemon instead of the cloud API:
|
|
553
|
+
|
|
554
|
+
```bash
|
|
555
|
+
1claw setup --local
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
This sets `ONECLAW_LOCAL_VAULT=true` and `ONECLAW_DAEMON_SOCKET` in the MCP config, so the MCP server connects to the local daemon instead of `api.1claw.xyz`. The model uses `proxy_request` to make API calls with secrets injected — the secret value never enters the model's context.
|
|
559
|
+
|
|
560
|
+
### Architecture
|
|
561
|
+
|
|
562
|
+
```
|
|
563
|
+
AI Client (Claude, Cursor, etc.)
|
|
564
|
+
└─ MCP Server (@1claw/mcp, local mode)
|
|
565
|
+
└─ Unix Socket (/~/.config/1claw/daemon.sock)
|
|
566
|
+
└─ 1claw Daemon (holds decrypted vault in memory)
|
|
567
|
+
├─ Policy Engine (per-secret host allowlist)
|
|
568
|
+
└─ Secret Proxy (injects credentials into HTTP requests)
|
|
569
|
+
```
|
|
570
|
+
|
|
509
571
|
## Global options
|
|
510
572
|
|
|
511
573
|
```bash
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkEpC,eAAO,MAAM,aAAa,SAEzB,CAAC"}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { createServer, } from "node:http";
|
|
3
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import inquirer from "inquirer";
|
|
8
|
+
import { printSuccess, printError, printWarning, printInfo, printKeyValue, printTable, } from "../output.js";
|
|
9
|
+
import { vaultExists, loadVault, getSecret, listSecrets, } from "../local-vault.js";
|
|
10
|
+
import { loadPolicy, savePolicy, isHostAllowed, setSecretPolicy, removeSecretPolicy, getPolicyPath, policyExists, } from "../local-policy.js";
|
|
11
|
+
import { proxyRequest } from "../secret-proxy.js";
|
|
12
|
+
const CONFIG_DIR = process.env.ONECLAW_CONFIG_DIR || join(homedir(), ".config", "1claw");
|
|
13
|
+
const SOCKET_PATH = process.env.ONECLAW_DAEMON_SOCKET || join(CONFIG_DIR, "daemon.sock");
|
|
14
|
+
const PID_FILE = join(CONFIG_DIR, "daemon.pid");
|
|
15
|
+
function readBody(req) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
const chunks = [];
|
|
18
|
+
req.on("data", (c) => chunks.push(c));
|
|
19
|
+
req.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
|
|
20
|
+
req.on("error", reject);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function jsonResponse(res, status, body) {
|
|
24
|
+
res.writeHead(status, { "Content-Type": "application/json" });
|
|
25
|
+
res.end(JSON.stringify(body));
|
|
26
|
+
}
|
|
27
|
+
export const daemonCommand = new Command("daemon").description("Local daemon — serves secrets over a Unix socket without exposing values");
|
|
28
|
+
// ── daemon start ─────────────────────────────────────────
|
|
29
|
+
daemonCommand
|
|
30
|
+
.command("start")
|
|
31
|
+
.description("Start the local secret daemon on a Unix socket")
|
|
32
|
+
.option("--foreground", "Run in the foreground (don't daemonize)")
|
|
33
|
+
.option("--socket <path>", "Custom socket path")
|
|
34
|
+
.action(async (opts) => {
|
|
35
|
+
try {
|
|
36
|
+
if (!vaultExists()) {
|
|
37
|
+
printError("No local vault. Run `1claw local init` first.");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
const socketPath = opts.socket ?? SOCKET_PATH;
|
|
41
|
+
if (existsSync(socketPath)) {
|
|
42
|
+
try {
|
|
43
|
+
unlinkSync(socketPath);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
printError(`Socket ${socketPath} exists and cannot be removed. Is another daemon running?`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
console.log();
|
|
51
|
+
printInfo("Unlocking local vault to start daemon...");
|
|
52
|
+
const { passphrase } = await inquirer.prompt([
|
|
53
|
+
{
|
|
54
|
+
type: "password",
|
|
55
|
+
name: "passphrase",
|
|
56
|
+
message: "Vault passphrase:",
|
|
57
|
+
mask: "*",
|
|
58
|
+
},
|
|
59
|
+
]);
|
|
60
|
+
let vault;
|
|
61
|
+
try {
|
|
62
|
+
vault = loadVault(passphrase);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
printError("Wrong passphrase or corrupted vault file.");
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const policy = loadPolicy();
|
|
69
|
+
const secretCount = Object.keys(vault.secrets).length;
|
|
70
|
+
const policyCount = Object.keys(policy.secrets).length;
|
|
71
|
+
const server = createDaemonServer(vault, policy);
|
|
72
|
+
server.listen(socketPath, () => {
|
|
73
|
+
try {
|
|
74
|
+
const { chmodSync } = require("node:fs");
|
|
75
|
+
chmodSync(socketPath, 0o600);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// best-effort
|
|
79
|
+
}
|
|
80
|
+
writeFileSync(PID_FILE, String(process.pid));
|
|
81
|
+
console.log();
|
|
82
|
+
printSuccess(`1Claw daemon running on ${chalk.bold(socketPath)}`);
|
|
83
|
+
printInfo(`Serving ${secretCount} secret(s), ${policyCount} policy rule(s).`);
|
|
84
|
+
printInfo("Press Ctrl+C to stop.");
|
|
85
|
+
console.log();
|
|
86
|
+
printInfo("Configure MCP for local mode:");
|
|
87
|
+
console.log(chalk.dim(` 1claw setup --local\n` +
|
|
88
|
+
` # or set ONECLAW_DAEMON_SOCKET=${socketPath}`));
|
|
89
|
+
console.log();
|
|
90
|
+
});
|
|
91
|
+
const shutdown = () => {
|
|
92
|
+
console.log();
|
|
93
|
+
printInfo("Shutting down daemon...");
|
|
94
|
+
server.close(() => {
|
|
95
|
+
try {
|
|
96
|
+
unlinkSync(socketPath);
|
|
97
|
+
}
|
|
98
|
+
catch { /* ok */ }
|
|
99
|
+
try {
|
|
100
|
+
unlinkSync(PID_FILE);
|
|
101
|
+
}
|
|
102
|
+
catch { /* ok */ }
|
|
103
|
+
process.exit(0);
|
|
104
|
+
});
|
|
105
|
+
setTimeout(() => process.exit(0), 3000);
|
|
106
|
+
};
|
|
107
|
+
process.on("SIGINT", shutdown);
|
|
108
|
+
process.on("SIGTERM", shutdown);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (err instanceof Error)
|
|
112
|
+
printError(err.message);
|
|
113
|
+
else
|
|
114
|
+
printError(String(err));
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
// ── daemon stop ──────────────────────────────────────────
|
|
119
|
+
daemonCommand
|
|
120
|
+
.command("stop")
|
|
121
|
+
.description("Stop the running daemon")
|
|
122
|
+
.action(() => {
|
|
123
|
+
if (!existsSync(PID_FILE)) {
|
|
124
|
+
printInfo("No daemon PID file found. The daemon may not be running.");
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const pid = parseInt(readFileSync(PID_FILE, "utf-8").trim(), 10);
|
|
129
|
+
process.kill(pid, "SIGTERM");
|
|
130
|
+
printSuccess(`Sent SIGTERM to daemon (PID ${pid}).`);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
if (err.code === "ESRCH") {
|
|
134
|
+
printWarning("Daemon process not found. Cleaning up PID file.");
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
printError(`Failed to stop daemon: ${err.message}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
unlinkSync(PID_FILE);
|
|
142
|
+
}
|
|
143
|
+
catch { /* ok */ }
|
|
144
|
+
});
|
|
145
|
+
// ── daemon status ────────────────────────────────────────
|
|
146
|
+
daemonCommand
|
|
147
|
+
.command("status")
|
|
148
|
+
.description("Show daemon status")
|
|
149
|
+
.action(() => {
|
|
150
|
+
const socketExists = existsSync(process.env.ONECLAW_DAEMON_SOCKET || SOCKET_PATH);
|
|
151
|
+
let pidRunning = false;
|
|
152
|
+
let pid = "";
|
|
153
|
+
if (existsSync(PID_FILE)) {
|
|
154
|
+
pid = readFileSync(PID_FILE, "utf-8").trim();
|
|
155
|
+
try {
|
|
156
|
+
process.kill(parseInt(pid, 10), 0);
|
|
157
|
+
pidRunning = true;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
pidRunning = false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
printKeyValue([
|
|
164
|
+
[
|
|
165
|
+
"Daemon",
|
|
166
|
+
pidRunning
|
|
167
|
+
? chalk.green("running") + ` (PID ${pid})`
|
|
168
|
+
: chalk.dim("stopped"),
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
"Socket",
|
|
172
|
+
socketExists
|
|
173
|
+
? chalk.green(SOCKET_PATH)
|
|
174
|
+
: chalk.dim("not found"),
|
|
175
|
+
],
|
|
176
|
+
[
|
|
177
|
+
"Policy",
|
|
178
|
+
policyExists()
|
|
179
|
+
? chalk.green(getPolicyPath())
|
|
180
|
+
: chalk.dim("none (using defaults)"),
|
|
181
|
+
],
|
|
182
|
+
]);
|
|
183
|
+
});
|
|
184
|
+
// ── daemon policy ────────────────────────────────────────
|
|
185
|
+
const policyCmd = daemonCommand
|
|
186
|
+
.command("policy")
|
|
187
|
+
.description("Manage per-secret host allowlist policies");
|
|
188
|
+
policyCmd
|
|
189
|
+
.command("add <secret>")
|
|
190
|
+
.description("Add or update a policy for a secret")
|
|
191
|
+
.requiredOption("--hosts <hosts>", "Comma-separated allowed hosts (e.g. api.stripe.com,*.openai.com)")
|
|
192
|
+
.option("--inject-as <method>", "Injection method: bearer, header, basic, query", "bearer")
|
|
193
|
+
.option("--header-name <name>", "Header name (for inject-as=header)")
|
|
194
|
+
.option("--query-param <param>", "Query parameter name (for inject-as=query)")
|
|
195
|
+
.action((secret, opts) => {
|
|
196
|
+
const policy = loadPolicy();
|
|
197
|
+
const sp = {
|
|
198
|
+
allowed_hosts: opts.hosts.split(",").map((h) => h.trim()),
|
|
199
|
+
inject_as: opts.injectAs,
|
|
200
|
+
};
|
|
201
|
+
if (opts.headerName)
|
|
202
|
+
sp.header_name = opts.headerName;
|
|
203
|
+
if (opts.queryParam)
|
|
204
|
+
sp.query_param = opts.queryParam;
|
|
205
|
+
setSecretPolicy(policy, secret, sp);
|
|
206
|
+
savePolicy(policy);
|
|
207
|
+
printSuccess(`Policy set for ${chalk.bold(secret)}: allowed hosts = [${sp.allowed_hosts.join(", ")}]`);
|
|
208
|
+
});
|
|
209
|
+
policyCmd
|
|
210
|
+
.command("remove <secret>")
|
|
211
|
+
.description("Remove a policy for a secret")
|
|
212
|
+
.action((secret) => {
|
|
213
|
+
const policy = loadPolicy();
|
|
214
|
+
if (removeSecretPolicy(policy, secret)) {
|
|
215
|
+
savePolicy(policy);
|
|
216
|
+
printSuccess(`Policy removed for ${chalk.bold(secret)}.`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
printWarning(`No policy found for "${secret}".`);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
policyCmd
|
|
223
|
+
.command("list")
|
|
224
|
+
.alias("ls")
|
|
225
|
+
.description("List all secret policies")
|
|
226
|
+
.action(() => {
|
|
227
|
+
const policy = loadPolicy();
|
|
228
|
+
const entries = Object.entries(policy.secrets);
|
|
229
|
+
if (entries.length === 0) {
|
|
230
|
+
printInfo("No policies configured. Add one with: 1claw daemon policy add <secret> --hosts <hosts>");
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
printTable(entries.map(([name, sp]) => ({
|
|
234
|
+
secret: name,
|
|
235
|
+
hosts: sp.allowed_hosts.join(", "),
|
|
236
|
+
inject: sp.inject_as,
|
|
237
|
+
})), [
|
|
238
|
+
{ key: "secret", header: "Secret" },
|
|
239
|
+
{ key: "hosts", header: "Allowed Hosts" },
|
|
240
|
+
{ key: "inject", header: "Inject As" },
|
|
241
|
+
]);
|
|
242
|
+
});
|
|
243
|
+
// ── Daemon HTTP server on Unix socket ────────────────────
|
|
244
|
+
function createDaemonServer(vault, policy) {
|
|
245
|
+
return createServer(async (req, res) => {
|
|
246
|
+
const path = req.url ?? "/";
|
|
247
|
+
const method = req.method ?? "GET";
|
|
248
|
+
// Health check
|
|
249
|
+
if (path === "/health") {
|
|
250
|
+
jsonResponse(res, 200, {
|
|
251
|
+
status: "ok",
|
|
252
|
+
daemon: "1claw",
|
|
253
|
+
secrets: Object.keys(vault.secrets).length,
|
|
254
|
+
policies: Object.keys(policy.secrets).length,
|
|
255
|
+
});
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// List secret names (never values)
|
|
259
|
+
if (path === "/secrets" && method === "GET") {
|
|
260
|
+
const secrets = listSecrets(vault).map((s) => ({
|
|
261
|
+
name: s.name,
|
|
262
|
+
type: s.type,
|
|
263
|
+
synced: s.synced,
|
|
264
|
+
}));
|
|
265
|
+
jsonResponse(res, 200, { secrets });
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
// Check if a secret exists + get metadata
|
|
269
|
+
if (path.startsWith("/secrets/") && method === "GET") {
|
|
270
|
+
const name = decodeURIComponent(path.slice("/secrets/".length));
|
|
271
|
+
const secret = getSecret(vault, name);
|
|
272
|
+
if (!secret) {
|
|
273
|
+
jsonResponse(res, 404, { error: `Secret "${name}" not found` });
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
jsonResponse(res, 200, {
|
|
277
|
+
name,
|
|
278
|
+
type: secret.type,
|
|
279
|
+
synced: secret.synced_to_cloud,
|
|
280
|
+
created_at: secret.created_at,
|
|
281
|
+
updated_at: secret.updated_at,
|
|
282
|
+
has_policy: !!policy.secrets[name],
|
|
283
|
+
});
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
// Proxy request — inject secret without exposing value
|
|
287
|
+
if (path === "/proxy" && method === "POST") {
|
|
288
|
+
let body;
|
|
289
|
+
try {
|
|
290
|
+
body = await readBody(req);
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
jsonResponse(res, 400, { error: "Failed to read request body" });
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
let proxyReq;
|
|
297
|
+
try {
|
|
298
|
+
proxyReq = JSON.parse(body);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
jsonResponse(res, 400, { error: "Invalid JSON body" });
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
if (!proxyReq.secretName || !proxyReq.url) {
|
|
305
|
+
jsonResponse(res, 400, {
|
|
306
|
+
error: "Missing required fields: secretName, url",
|
|
307
|
+
});
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
const result = await proxyRequest(proxyReq, vault, policy);
|
|
311
|
+
if (!result.success) {
|
|
312
|
+
jsonResponse(res, 403, { error: result.error });
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
jsonResponse(res, 200, {
|
|
316
|
+
status: result.response.status,
|
|
317
|
+
headers: result.response.headers,
|
|
318
|
+
body: result.response.body,
|
|
319
|
+
});
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
// Check policy for a secret + host
|
|
323
|
+
if (path === "/check-policy" && method === "POST") {
|
|
324
|
+
let body;
|
|
325
|
+
try {
|
|
326
|
+
body = await readBody(req);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
jsonResponse(res, 400, { error: "Failed to read request body" });
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
let parsed;
|
|
333
|
+
try {
|
|
334
|
+
parsed = JSON.parse(body);
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
jsonResponse(res, 400, { error: "Invalid JSON body" });
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
const check = isHostAllowed(policy, parsed.secretName, parsed.url);
|
|
341
|
+
jsonResponse(res, check.allowed ? 200 : 403, check);
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
jsonResponse(res, 404, { error: "Not found" });
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/commands/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/commands/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4FpC,eAAO,MAAM,YAAY,SAExB,CAAC"}
|