@dropthis/cli 0.2.4 → 0.2.5
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 +82 -27
- package/dist/cli.cjs +29 -12
- package/dist/cli.cjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @dropthis/cli
|
|
2
2
|
|
|
3
|
-
Official CLI for [dropthis](https://dropthis.app) -- the publish layer between AI and the internet.
|
|
3
|
+
Official CLI for [dropthis](https://dropthis.app) -- the publish layer between AI and the internet. Built for humans, AI agents, and CI/CD pipelines.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -8,6 +8,8 @@ Official CLI for [dropthis](https://dropthis.app) -- the publish layer between A
|
|
|
8
8
|
npm install -g @dropthis/cli
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
Requires Node.js >= 20.
|
|
12
|
+
|
|
11
13
|
## Quick start
|
|
12
14
|
|
|
13
15
|
```bash
|
|
@@ -23,7 +25,17 @@ Log in with email OTP:
|
|
|
23
25
|
dropthis login
|
|
24
26
|
```
|
|
25
27
|
|
|
26
|
-
The CLI prompts for your email and a one-time code. For non-interactive environments,
|
|
28
|
+
The CLI prompts for your email and a one-time code. For non-interactive environments (agents, CI), use the two-step flow:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Step 1: Request OTP
|
|
32
|
+
dropthis login request --email you@example.com
|
|
33
|
+
|
|
34
|
+
# Step 2: Verify OTP
|
|
35
|
+
dropthis login verify --email you@example.com --otp 123456
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Or pass both flags directly:
|
|
27
39
|
|
|
28
40
|
```bash
|
|
29
41
|
dropthis login --email you@example.com --otp 123456
|
|
@@ -36,8 +48,9 @@ Credentials resolve in this order:
|
|
|
36
48
|
3. Stored credential from `dropthis login`
|
|
37
49
|
|
|
38
50
|
```bash
|
|
39
|
-
dropthis whoami
|
|
40
|
-
dropthis logout
|
|
51
|
+
dropthis whoami # Check current auth status
|
|
52
|
+
dropthis logout # Remove stored credentials
|
|
53
|
+
dropthis logout --revoke # Remove and revoke the key on the server
|
|
41
54
|
```
|
|
42
55
|
|
|
43
56
|
## Publish
|
|
@@ -46,7 +59,7 @@ dropthis logout
|
|
|
46
59
|
# HTML file
|
|
47
60
|
dropthis publish report.html
|
|
48
61
|
|
|
49
|
-
# Directory
|
|
62
|
+
# Directory (static site)
|
|
50
63
|
dropthis publish ./dist
|
|
51
64
|
|
|
52
65
|
# Stdin
|
|
@@ -55,11 +68,11 @@ echo "<h1>Hello</h1>" | dropthis publish - --content-type text/html --path index
|
|
|
55
68
|
# Multiple files bundled into one drop
|
|
56
69
|
dropthis publish index.html styles.css app.js
|
|
57
70
|
|
|
58
|
-
# Print only the URL
|
|
71
|
+
# Print only the URL (recommended for agents)
|
|
59
72
|
dropthis publish ./dist --url
|
|
60
73
|
```
|
|
61
74
|
|
|
62
|
-
###
|
|
75
|
+
### Publish options
|
|
63
76
|
|
|
64
77
|
```bash
|
|
65
78
|
dropthis publish ./dist \
|
|
@@ -70,7 +83,7 @@ dropthis publish ./dist \
|
|
|
70
83
|
--expires-at 2026-12-31T00:00:00Z
|
|
71
84
|
```
|
|
72
85
|
|
|
73
|
-
All publish
|
|
86
|
+
All publish flags:
|
|
74
87
|
|
|
75
88
|
| Flag | Description |
|
|
76
89
|
|------|-------------|
|
|
@@ -94,7 +107,7 @@ All publish options:
|
|
|
94
107
|
|
|
95
108
|
### Global flags
|
|
96
109
|
|
|
97
|
-
These flags are inherited by all commands
|
|
110
|
+
These flags are inherited by all commands:
|
|
98
111
|
|
|
99
112
|
| Flag | Description |
|
|
100
113
|
|------|-------------|
|
|
@@ -113,45 +126,61 @@ dropthis update drop_abc123 --title "New title"
|
|
|
113
126
|
|
|
114
127
|
# Optimistic concurrency
|
|
115
128
|
dropthis update drop_abc123 ./dist-v2 --if-revision 1
|
|
129
|
+
|
|
130
|
+
# Change vanity slug
|
|
131
|
+
dropthis update drop_abc123 --slug new-slug
|
|
116
132
|
```
|
|
117
133
|
|
|
134
|
+
The `update` command supports all publish flags plus `--slug` and `--if-revision`.
|
|
135
|
+
|
|
118
136
|
## Commands
|
|
119
137
|
|
|
120
138
|
```bash
|
|
121
|
-
dropthis publish
|
|
122
|
-
dropthis update <drop-id> [input]
|
|
139
|
+
dropthis publish [input...] # Publish content, get a URL
|
|
140
|
+
dropthis update <drop-id> [input] # Update an existing drop
|
|
123
141
|
|
|
124
|
-
dropthis drops list
|
|
125
|
-
dropthis drops get <drop-id>
|
|
126
|
-
dropthis drops update <drop-id>
|
|
127
|
-
dropthis drops delete <drop-id>
|
|
142
|
+
dropthis drops list # List your drops
|
|
143
|
+
dropthis drops get <drop-id> # Get drop details
|
|
144
|
+
dropthis drops update <drop-id> # Update drop metadata
|
|
145
|
+
dropthis drops delete <drop-id> # Delete a drop
|
|
128
146
|
|
|
129
|
-
dropthis login
|
|
130
|
-
dropthis
|
|
131
|
-
dropthis
|
|
132
|
-
dropthis
|
|
147
|
+
dropthis login # Authenticate with email OTP
|
|
148
|
+
dropthis login request --email <email> # Request OTP (non-interactive)
|
|
149
|
+
dropthis login verify --email <email> --otp <code> # Verify OTP
|
|
150
|
+
dropthis logout # Remove stored credentials
|
|
151
|
+
dropthis whoami # Show current auth status
|
|
152
|
+
dropthis account # Account details
|
|
133
153
|
|
|
134
|
-
dropthis api-keys create
|
|
135
|
-
dropthis api-keys list
|
|
136
|
-
dropthis api-keys delete <key-id>
|
|
154
|
+
dropthis api-keys create # Create an API key
|
|
155
|
+
dropthis api-keys list # List API keys
|
|
156
|
+
dropthis api-keys delete <key-id> # Delete an API key
|
|
137
157
|
|
|
138
158
|
dropthis deployments list <drop-id> # List deployments
|
|
139
159
|
dropthis deployments get <drop-id> <dep-id> # Get deployment details
|
|
140
160
|
|
|
141
|
-
dropthis doctor
|
|
142
|
-
dropthis commands
|
|
161
|
+
dropthis doctor # CLI diagnostics
|
|
162
|
+
dropthis commands # Machine-readable command metadata
|
|
143
163
|
```
|
|
144
164
|
|
|
145
|
-
## CI
|
|
165
|
+
## Agent & CI/CD usage
|
|
166
|
+
|
|
167
|
+
The CLI is designed for non-interactive use. In non-TTY environments (pipes, CI, agents), output defaults to JSON automatically.
|
|
146
168
|
|
|
147
|
-
|
|
169
|
+
**Environment variable auth (recommended for CI):**
|
|
148
170
|
|
|
149
171
|
```bash
|
|
150
172
|
export DROPTHIS_API_KEY=sk_live_...
|
|
151
173
|
dropthis publish ./dist --url
|
|
152
174
|
```
|
|
153
175
|
|
|
154
|
-
|
|
176
|
+
**Agent protocol:**
|
|
177
|
+
|
|
178
|
+
- Use `--url` to get only the published URL (cleanest for agents)
|
|
179
|
+
- Use `--json` for the full structured response
|
|
180
|
+
- Use `--yes` for destructive commands (`drops delete`, `api-keys delete`)
|
|
181
|
+
- All errors write to stderr as JSON with a `next_action` field
|
|
182
|
+
|
|
183
|
+
**Exit codes:**
|
|
155
184
|
|
|
156
185
|
| Code | Meaning |
|
|
157
186
|
|------|---------|
|
|
@@ -162,6 +191,32 @@ All commands support `--json` for structured output. Errors write to stderr with
|
|
|
162
191
|
| 4 | Local input error |
|
|
163
192
|
| 5 | Network error |
|
|
164
193
|
|
|
194
|
+
**JSON output shape:**
|
|
195
|
+
|
|
196
|
+
```json
|
|
197
|
+
{"ok":true,"drop":{"url":"https://dropthis.app/abc123","id":"drop_abc123"}}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Error shape (stderr):**
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
{"ok":false,"error":{"code":"auth_error","message":"No API key found.","next_action":"Set DROPTHIS_API_KEY or run dropthis login."}}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Doctor
|
|
207
|
+
|
|
208
|
+
Run diagnostics to verify CLI health:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
dropthis doctor
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Reports CLI version, auth source (`env`, `flag`, `stored`, or `missing`), and credential storage backend (`keyring`, `file`, or `none`).
|
|
215
|
+
|
|
216
|
+
```json
|
|
217
|
+
{"ok":true,"version":"0.2.4","auth":{"source":"env"},"storage":{"backend":"keyring"}}
|
|
218
|
+
```
|
|
219
|
+
|
|
165
220
|
## Agent skills
|
|
166
221
|
|
|
167
222
|
This CLI ships with an [agent skill](https://skills.sh) that teaches AI coding agents (Cursor, Claude Code, Windsurf, etc.) how to use the dropthis CLI effectively, including non-interactive flags, output formats, and common pitfalls.
|
package/dist/cli.cjs
CHANGED
|
@@ -490,13 +490,13 @@ async function runDoctor(_input, deps) {
|
|
|
490
490
|
const authSource = credential?.source ?? "missing";
|
|
491
491
|
const storageBackend = stored?.storage ?? "none";
|
|
492
492
|
const pairs = [
|
|
493
|
-
["Version", "0.2.
|
|
493
|
+
["Version", "0.2.5"],
|
|
494
494
|
["Auth", authSource],
|
|
495
495
|
["Storage", storageBackend]
|
|
496
496
|
];
|
|
497
497
|
writeKv(deps, pairs, {
|
|
498
498
|
ok: true,
|
|
499
|
-
version: "0.2.
|
|
499
|
+
version: "0.2.5",
|
|
500
500
|
auth: { source: authSource },
|
|
501
501
|
storage: { backend: storageBackend }
|
|
502
502
|
});
|
|
@@ -1358,7 +1358,7 @@ function buildProgram(options = {}) {
|
|
|
1358
1358
|
` ${import_picocolors3.default.cyan("dropthis login")}`,
|
|
1359
1359
|
` ${import_picocolors3.default.cyan("dropthis publish ./dist")}`
|
|
1360
1360
|
].join("\n")
|
|
1361
|
-
).version("0.2.
|
|
1361
|
+
).version("0.2.5").configureHelp({
|
|
1362
1362
|
subcommandTerm(cmd) {
|
|
1363
1363
|
const args = cmd.registeredArguments.map((a) => {
|
|
1364
1364
|
const name = a.name();
|
|
@@ -1382,14 +1382,20 @@ function buildProgram(options = {}) {
|
|
|
1382
1382
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1383
1383
|
const stdinIsTTY = options.stdinIsTTY ?? process.stdin.isTTY ?? false;
|
|
1384
1384
|
let publishInput;
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1385
|
+
try {
|
|
1386
|
+
if (commandOptions.dryRun && inputs.length > 1) {
|
|
1387
|
+
publishInput = inputs;
|
|
1388
|
+
} else {
|
|
1389
|
+
publishInput = await resolvePublishInputs(
|
|
1390
|
+
inputs,
|
|
1391
|
+
options.stdin,
|
|
1392
|
+
stdinIsTTY
|
|
1393
|
+
);
|
|
1394
|
+
}
|
|
1395
|
+
} catch (err) {
|
|
1396
|
+
const msg = err instanceof Error ? err.message : "Invalid input.";
|
|
1397
|
+
process.exitCode = writeError(deps, "local_input_error", msg).exitCode;
|
|
1398
|
+
return;
|
|
1393
1399
|
}
|
|
1394
1400
|
const result = await runPublish(
|
|
1395
1401
|
publishInput,
|
|
@@ -1404,7 +1410,18 @@ function buildProgram(options = {}) {
|
|
|
1404
1410
|
).option("--url", "Print only the published URL").option("--dry-run", "Validate without publishing").action(
|
|
1405
1411
|
async (target, input, commandOptions) => {
|
|
1406
1412
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1407
|
-
|
|
1413
|
+
let updateInput;
|
|
1414
|
+
try {
|
|
1415
|
+
updateInput = input ? await resolveCommandInput(input, options.stdin) : void 0;
|
|
1416
|
+
} catch (err) {
|
|
1417
|
+
const msg = err instanceof Error ? err.message : "Invalid input.";
|
|
1418
|
+
process.exitCode = writeError(
|
|
1419
|
+
deps,
|
|
1420
|
+
"local_input_error",
|
|
1421
|
+
msg
|
|
1422
|
+
).exitCode;
|
|
1423
|
+
return;
|
|
1424
|
+
}
|
|
1408
1425
|
const result = await runUpdate(
|
|
1409
1426
|
target,
|
|
1410
1427
|
updateInput,
|
package/dist/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/program.ts","../src/auth.ts","../src/output.ts","../src/ui.ts","../src/fmt.ts","../src/commands/account.ts","../src/commands/api-keys.ts","../src/commands/commands.ts","../src/commands/deployments.ts","../src/commands/doctor.ts","../src/commands/drops.ts","../src/options.ts","../src/commands/login.ts","../src/commands/logout.ts","../src/commands/publish.ts","../src/spinner.ts","../src/commands/json_body.ts","../src/commands/update.ts","../src/commands/whoami.ts","../src/context.ts","../src/storage.ts","../src/cli.ts"],"sourcesContent":["import { Command, InvalidArgumentError } from \"commander\";\nimport pc from \"picocolors\";\nimport { resolveCredential } from \"./auth.js\";\nimport { runAccountGet } from \"./commands/account.js\";\nimport {\n\trunApiKeysCreate,\n\trunApiKeysDelete,\n\trunApiKeysList,\n} from \"./commands/api-keys.js\";\nimport { runCommands } from \"./commands/commands.js\";\nimport {\n\trunDeploymentsGet,\n\trunDeploymentsList,\n} from \"./commands/deployments.js\";\nimport { runDoctor } from \"./commands/doctor.js\";\nimport {\n\trunDropsDelete,\n\trunDropsGet,\n\trunDropsList,\n\trunDropsUpdate,\n} from \"./commands/drops.js\";\nimport {\n\trunLoginInteractive,\n\trunLoginRequest,\n\trunLoginVerify,\n} from \"./commands/login.js\";\nimport { runLogout } from \"./commands/logout.js\";\nimport { runPublish } from \"./commands/publish.js\";\nimport { runUpdate } from \"./commands/update.js\";\nimport { runWhoami } from \"./commands/whoami.js\";\nimport { createContext, type GlobalOptions } from \"./context.js\";\nimport type { RawDropOptions } from \"./options.js\";\nimport { type CredentialStore, MemoryCredentialStore } from \"./storage.js\";\n\ntype BuildProgramOptions = {\n\tstore?: CredentialStore;\n\tclient?: unknown;\n\tenv?: Record<string, string | undefined>;\n\tstdin?: AsyncIterable<string | Uint8Array>;\n\tstdout?: (value: string) => void;\n\tstderr?: (value: string) => void;\n\tstdoutIsTTY?: boolean;\n\tstdinIsTTY?: boolean;\n};\n\nexport function buildProgram(options: BuildProgramOptions = {}): Command {\n\tconst program = new Command();\n\tconst store = options.store ?? new MemoryCredentialStore();\n\tprogram\n\t\t.name(\"dropthis\")\n\t\t.description(\n\t\t\t[\n\t\t\t\tpc.dim(\"Publish anything online and get a URL back.\"),\n\t\t\t\t\"\",\n\t\t\t\t`${pc.bold(\"Quick start:\")}`,\n\t\t\t\t` ${pc.cyan(\"dropthis login\")}`,\n\t\t\t\t` ${pc.cyan(\"dropthis publish ./dist\")}`,\n\t\t\t].join(\"\\n\"),\n\t\t)\n\t\t.version(PKG_VERSION)\n\t\t.configureHelp({\n\t\t\tsubcommandTerm(cmd) {\n\t\t\t\tconst args = cmd.registeredArguments\n\t\t\t\t\t.map((a) => {\n\t\t\t\t\t\tconst name = a.name();\n\t\t\t\t\t\tconst variadic = a.variadic ? \"...\" : \"\";\n\t\t\t\t\t\treturn a.required ? `<${name}${variadic}>` : `[${name}${variadic}]`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\" \");\n\t\t\t\treturn args ? `${cmd.name()} ${args}` : cmd.name();\n\t\t\t},\n\t\t\tstyleTitle: (title) => pc.bold(title),\n\t\t\tstyleCommandText: (str) => pc.cyan(str),\n\t\t\tstyleSubcommandText: (str) => pc.cyan(str),\n\t\t\tstyleOptionText: (str) => pc.yellow(str),\n\t\t});\n\tprogram.option(\"--api-key <key>\", \"Override API key for this invocation\");\n\tprogram.option(\"--api-url <url>\", \"Override API base URL\");\n\tprogram.option(\"--json\", \"Force JSON output\");\n\tprogram.option(\"-q, --quiet\", \"Suppress status output and imply JSON\");\n\n\tprogram\n\t\t.command(\"publish [input...]\")\n\t\t.description(\n\t\t\t\"Publish files, folders, URLs, strings, or stdin.\\nMultiple files are bundled into one drop.\\nUse - to read stdin explicitly, or pipe without args.\",\n\t\t)\n\t\t.option(\"--from-json <path>\", \"Read exact POST /drops JSON request body\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.option(\"--title <title>\", \"Drop title\")\n\t\t.option(\"--visibility <visibility>\", \"Drop visibility\")\n\t\t.option(\"--password <password>\", \"Set password\")\n\t\t.option(\"--no-password\", \"Clear password\")\n\t\t.option(\"--noindex\", \"Prevent indexing\")\n\t\t.option(\"--index\", \"Allow indexing\")\n\t\t.option(\"--expires-at <datetime>\", \"Expiration datetime\")\n\t\t.option(\"--metadata <json>\", \"Metadata JSON object\")\n\t\t.option(\"--metadata-file <path>\", \"Metadata JSON file\")\n\t\t.option(\"--entry <path>\", \"Entry file path\")\n\t\t.option(\"--content-type <mime>\", \"Content type\")\n\t\t.option(\"--path <path>\", \"Path for stdin or byte input\")\n\t\t.option(\"--idempotency-key <key>\", \"Idempotency key\")\n\t\t.option(\"--url\", \"Print only the published URL\")\n\t\t.option(\"--dry-run\", \"Validate without publishing\")\n\t\t.action(async (inputs: string[], commandOptions: RawCommandOptions) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runPublish>[2][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst stdinIsTTY = options.stdinIsTTY ?? process.stdin.isTTY ?? false;\n\t\t\tlet publishInput: string | string[] | undefined;\n\t\t\tif (commandOptions.dryRun && inputs.length > 1) {\n\t\t\t\tpublishInput = inputs;\n\t\t\t} else {\n\t\t\t\tpublishInput = await resolvePublishInputs(\n\t\t\t\t\tinputs,\n\t\t\t\t\toptions.stdin,\n\t\t\t\t\tstdinIsTTY,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst result = await runPublish(\n\t\t\t\tpublishInput,\n\t\t\t\ttoDropOptions(commandOptions),\n\t\t\t\tdeps,\n\t\t\t);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\tprogram\n\t\t.command(\"update <target> [input]\")\n\t\t.description(\"Deploy new content to an existing drop\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.option(\"--slug <slug>\", \"Replace shared hosted drop slug\")\n\t\t.option(\"--title <title>\", \"Drop title\")\n\t\t.option(\"--visibility <visibility>\", \"Drop visibility\")\n\t\t.option(\"--password <password>\", \"Set password\")\n\t\t.option(\"--no-password\", \"Clear password\")\n\t\t.option(\"--noindex\", \"Prevent indexing\")\n\t\t.option(\"--index\", \"Allow indexing\")\n\t\t.option(\"--expires-at <datetime>\", \"Expiration datetime\")\n\t\t.option(\"--metadata <json>\", \"Metadata JSON object\")\n\t\t.option(\"--metadata-file <path>\", \"Metadata JSON file\")\n\t\t.option(\"--entry <path>\", \"Entry file path\")\n\t\t.option(\"--content-type <mime>\", \"Content type\")\n\t\t.option(\"--path <path>\", \"Path for stdin or byte input\")\n\t\t.option(\"--idempotency-key <key>\", \"Idempotency key\")\n\t\t.option(\"--if-revision <n>\", \"Expected current revision\", parseInteger)\n\t\t.option(\n\t\t\t\"--from-json <path>\",\n\t\t\t\"Read exact POST /drops/{drop_id}/deployments JSON request body\",\n\t\t)\n\t\t.option(\"--url\", \"Print only the published URL\")\n\t\t.option(\"--dry-run\", \"Validate without publishing\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\ttarget: string,\n\t\t\t\tinput: string | undefined,\n\t\t\t\tcommandOptions: RawCommandOptions & { ifRevision?: number },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runUpdate>[3][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst updateInput = input\n\t\t\t\t\t? await resolveCommandInput(input, options.stdin)\n\t\t\t\t\t: undefined;\n\t\t\t\tconst result = await runUpdate(\n\t\t\t\t\ttarget,\n\t\t\t\t\tupdateInput,\n\t\t\t\t\ttoDropOptions(commandOptions),\n\t\t\t\t\tdeps,\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tconst drops = program.command(\"drops\").description(\"Manage published drops\");\n\tdrops\n\t\t.command(\"list\")\n\t\t.description(\"List your drops\")\n\t\t.option(\"--limit <n>\", \"Page size\", parseInteger)\n\t\t.option(\"--cursor <cursor>\", \"Pagination cursor\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (commandOptions: {\n\t\t\t\tlimit?: number;\n\t\t\t\tcursor?: string;\n\t\t\t\tjson?: boolean;\n\t\t\t}) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runDropsList>[1][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runDropsList(commandOptions, deps);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\tdrops\n\t\t.command(\"get <dropId>\")\n\t\t.description(\"Show drop details\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (dropId: string, commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runDropsGet>[2][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runDropsGet(dropId, commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tdrops\n\t\t.command(\"update <dropId>\")\n\t\t.description(\"Update drop metadata\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.option(\"--title <title>\", \"Drop title\")\n\t\t.option(\"--visibility <visibility>\", \"Drop visibility\")\n\t\t.option(\"--password <password>\", \"Set password\")\n\t\t.option(\"--no-password\", \"Clear password\")\n\t\t.option(\"--noindex\", \"Prevent indexing\")\n\t\t.option(\"--index\", \"Allow indexing\")\n\t\t.option(\"--expires-at <datetime>\", \"Expiration datetime\")\n\t\t.option(\"--metadata <json>\", \"Metadata JSON object\")\n\t\t.option(\"--metadata-file <path>\", \"Metadata JSON file\")\n\t\t.action(async (dropId: string, commandOptions: RawCommandOptions) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runDropsUpdate>[2][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runDropsUpdate(\n\t\t\t\tdropId,\n\t\t\t\ttoDropOptions(commandOptions),\n\t\t\t\tdeps,\n\t\t\t);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tdrops\n\t\t.command(\"delete <dropId>\")\n\t\t.description(\"Delete a drop\")\n\t\t.option(\"--yes\", \"Confirm deletion\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\tdropId: string,\n\t\t\t\tcommandOptions: { yes?: boolean; json?: boolean },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runDropsDelete>[2][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runDropsDelete(\n\t\t\t\t\tdropId,\n\t\t\t\t\t{ ...commandOptions, interactive: deps.outputMode === \"human\" },\n\t\t\t\t\tdeps,\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tconst apiKeys = program.command(\"api-keys\").description(\"Manage API keys\");\n\tapiKeys\n\t\t.command(\"create\")\n\t\t.description(\"Create an API key\")\n\t\t.option(\"--label <label>\", \"API key label\", \"CLI\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { label: string; json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runApiKeysCreate>[1][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runApiKeysCreate(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tapiKeys\n\t\t.command(\"list\")\n\t\t.description(\"List API keys\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runApiKeysList>[1][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runApiKeysList(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tapiKeys\n\t\t.command(\"delete <keyId>\")\n\t\t.description(\"Delete an API key\")\n\t\t.option(\"--yes\", \"Confirm deletion\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\tkeyId: string,\n\t\t\t\tcommandOptions: { yes?: boolean; json?: boolean },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runApiKeysDelete>[2][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runApiKeysDelete(\n\t\t\t\t\tkeyId,\n\t\t\t\t\t{ ...commandOptions, interactive: deps.outputMode === \"human\" },\n\t\t\t\t\tdeps,\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tconst deployments = program\n\t\t.command(\"deployments\")\n\t\t.description(\"View deployment history\");\n\tdeployments\n\t\t.command(\"list <dropId>\")\n\t\t.description(\"List deployments for a drop\")\n\t\t.option(\"--limit <n>\", \"Page size\", parseInteger)\n\t\t.option(\"--cursor <cursor>\", \"Pagination cursor\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\tdropId: string,\n\t\t\t\tcommandOptions: { limit?: number; cursor?: string; json?: boolean },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runDeploymentsList>[2][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runDeploymentsList(dropId, commandOptions, deps);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\tdeployments\n\t\t.command(\"get <dropId> <deploymentId>\")\n\t\t.description(\"Show deployment details\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\tdropId: string,\n\t\t\t\tdeploymentId: string,\n\t\t\t\tcommandOptions: { json?: boolean },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runDeploymentsGet>[3][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runDeploymentsGet(\n\t\t\t\t\tdropId,\n\t\t\t\t\tdeploymentId,\n\t\t\t\t\tcommandOptions,\n\t\t\t\t\tdeps,\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\t// --- Auth commands ---\n\n\tprogram\n\t\t.command(\"login\")\n\t\t.description(\"Authenticate with email OTP\")\n\t\t.option(\"--email <email>\", \"Email address\")\n\t\t.option(\"--otp <otp>\", \"One-time passcode\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (commandOptions: {\n\t\t\t\temail?: string;\n\t\t\t\totp?: string;\n\t\t\t\tjson?: boolean;\n\t\t\t}) => {\n\t\t\t\tif (!commandOptions.email || !commandOptions.otp) {\n\t\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\t\tParameters<typeof runLoginInteractive>[0][\"client\"]\n\t\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\t\tconst global = globalOptions(program, commandOptions);\n\t\t\t\t\tconst context = createContext({ global });\n\t\t\t\t\tconst result = await runLoginInteractive({\n\t\t\t\t\t\t...deps,\n\t\t\t\t\t\tcreateClient: (apiKey) =>\n\t\t\t\t\t\t\tcontext.createClient(apiKey) as Parameters<\n\t\t\t\t\t\t\t\ttypeof runLoginInteractive\n\t\t\t\t\t\t\t>[0][\"client\"],\n\t\t\t\t\t});\n\t\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runLoginVerify>[1][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst global = globalOptions(program, commandOptions);\n\t\t\t\tconst verifyContext = createContext({ global });\n\t\t\t\tconst result = await runLoginVerify(\n\t\t\t\t\t{\n\t\t\t\t\t\temail: commandOptions.email,\n\t\t\t\t\t\totp: commandOptions.otp,\n\t\t\t\t\t\t...(commandOptions.json !== undefined\n\t\t\t\t\t\t\t? { json: commandOptions.json }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t...deps,\n\t\t\t\t\t\tcreateClient: (apiKey) =>\n\t\t\t\t\t\t\tverifyContext.createClient(apiKey) as Parameters<\n\t\t\t\t\t\t\t\ttypeof runLoginVerify\n\t\t\t\t\t\t\t>[1][\"client\"],\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tconst login = program.commands.find((command) => command.name() === \"login\");\n\tlogin\n\t\t?.command(\"request\")\n\t\t.description(\"Request an email OTP\")\n\t\t.requiredOption(\"--email <email>\", \"Email address\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { email: string; json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runLoginRequest>[1][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runLoginRequest(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tlogin\n\t\t?.command(\"verify\")\n\t\t.description(\"Verify email OTP and store an API key\")\n\t\t.requiredOption(\"--email <email>\", \"Email address\")\n\t\t.requiredOption(\"--otp <otp>\", \"One-time passcode\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (commandOptions: {\n\t\t\t\temail: string;\n\t\t\t\totp: string;\n\t\t\t\tjson?: boolean;\n\t\t\t}) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runLoginVerify>[1][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst global = globalOptions(program, commandOptions);\n\t\t\t\tconst verifySubContext = createContext({ global });\n\t\t\t\tconst result = await runLoginVerify(commandOptions, {\n\t\t\t\t\t...deps,\n\t\t\t\t\tcreateClient: (apiKey) =>\n\t\t\t\t\t\tverifySubContext.createClient(apiKey) as Parameters<\n\t\t\t\t\t\t\ttypeof runLoginVerify\n\t\t\t\t\t\t>[1][\"client\"],\n\t\t\t\t});\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tprogram\n\t\t.command(\"logout\")\n\t\t.description(\"Remove stored credentials\")\n\t\t.option(\"--revoke\", \"Best-effort revoke the saved API key\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { revoke?: boolean; json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<Parameters<typeof runLogout>[1][\"client\"]>(\n\t\t\t\tprogram,\n\t\t\t\toptions,\n\t\t\t\tstore,\n\t\t\t\tcommandOptions,\n\t\t\t);\n\t\t\tconst result = await runLogout(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\tprogram\n\t\t.command(\"whoami\")\n\t\t.description(\"Show current authentication status\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<unknown>(\n\t\t\t\tprogram,\n\t\t\t\toptions,\n\t\t\t\tstore,\n\t\t\t\tcommandOptions,\n\t\t\t);\n\t\t\tconst result = await runWhoami(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\tprogram\n\t\t.command(\"account\")\n\t\t.description(\"Show account details\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runAccountGet>[1][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runAccountGet(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\t// --- Diagnostics ---\n\n\tprogram\n\t\t.command(\"doctor\")\n\t\t.description(\"Report CLI diagnostics\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<unknown>(\n\t\t\t\tprogram,\n\t\t\t\toptions,\n\t\t\t\tstore,\n\t\t\t\tcommandOptions,\n\t\t\t);\n\t\t\tconst result = await runDoctor(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\tprogram\n\t\t.command(\"commands\")\n\t\t.description(\"Print machine-readable command metadata\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<unknown>(\n\t\t\t\tprogram,\n\t\t\t\toptions,\n\t\t\t\tstore,\n\t\t\t\tcommandOptions,\n\t\t\t);\n\t\t\tconst result = await runCommands(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\treturn program;\n}\n\ntype RawCommandOptions = Omit<RawDropOptions, \"password\"> & {\n\tjson?: boolean;\n\tquiet?: boolean;\n\turl?: boolean;\n\tifRevision?: number;\n\tfromJson?: string;\n\tdryRun?: boolean;\n\tpassword?: string | boolean;\n};\n\ntype RunnerDeps<TClient> = {\n\tstore: CredentialStore;\n\tclient: TClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode: \"human\" | \"json\";\n};\n\nasync function commandDeps<TClient>(\n\tprogram: Command,\n\toptions: BuildProgramOptions,\n\tstore: CredentialStore,\n\tcommandOptions: { json?: boolean; quiet?: boolean },\n): Promise<RunnerDeps<TClient>> {\n\tconst global = globalOptions(program, commandOptions);\n\tconst context = createContext({\n\t\tglobal,\n\t\t...(options.env !== undefined ? { env: options.env } : {}),\n\t\t...(options.stdout !== undefined ? { stdout: options.stdout } : {}),\n\t\t...(options.stderr !== undefined ? { stderr: options.stderr } : {}),\n\t\t...(options.stdoutIsTTY !== undefined\n\t\t\t? { stdoutIsTTY: options.stdoutIsTTY }\n\t\t\t: {}),\n\t});\n\tconst credential = await resolveCredential({\n\t\t...(global.apiKey ? { apiKey: global.apiKey } : {}),\n\t\tenv: context.env,\n\t\tstore,\n\t});\n\treturn {\n\t\tstore,\n\t\tclient: (options.client ??\n\t\t\tcontext.createClient(credential?.apiKey)) as TClient,\n\t\t...(global.apiKey ? { apiKey: global.apiKey } : {}),\n\t\tenv: context.env,\n\t\tstdout: context.stdout,\n\t\tstderr: context.stderr,\n\t\toutputMode: context.output.mode,\n\t};\n}\n\nfunction globalOptions(\n\tprogram: Command,\n\tcommandOptions: { json?: boolean; quiet?: boolean },\n): GlobalOptions {\n\tconst opts = program.opts<GlobalOptions>();\n\treturn {\n\t\t...(opts.apiKey ? { apiKey: opts.apiKey } : {}),\n\t\t...(opts.apiUrl ? { apiUrl: opts.apiUrl } : {}),\n\t\t...(commandOptions.json !== undefined\n\t\t\t? { json: commandOptions.json }\n\t\t\t: opts.json !== undefined\n\t\t\t\t? { json: opts.json }\n\t\t\t\t: {}),\n\t\t...(commandOptions.quiet !== undefined\n\t\t\t? { quiet: commandOptions.quiet }\n\t\t\t: opts.quiet !== undefined\n\t\t\t\t? { quiet: opts.quiet }\n\t\t\t\t: {}),\n\t};\n}\n\nfunction toDropOptions(options: RawCommandOptions): RawDropOptions & {\n\tjson?: boolean;\n\tquiet?: boolean;\n\turl?: boolean;\n\tifRevision?: number;\n\tfromJson?: string;\n\tdryRun?: boolean;\n} {\n\treturn {\n\t\t...(options.slug ? { slug: options.slug } : {}),\n\t\t...(options.title ? { title: options.title } : {}),\n\t\t...(options.visibility === \"public\" || options.visibility === \"unlisted\"\n\t\t\t? { visibility: options.visibility }\n\t\t\t: {}),\n\t\t...(typeof options.password === \"string\"\n\t\t\t? { password: options.password }\n\t\t\t: {}),\n\t\t...(options.password === false || options.noPassword\n\t\t\t? { noPassword: true }\n\t\t\t: {}),\n\t\t...(options.noindex ? { noindex: true } : {}),\n\t\t...(options.index ? { index: true } : {}),\n\t\t...(options.expiresAt ? { expiresAt: options.expiresAt } : {}),\n\t\t...(options.metadata ? { metadata: options.metadata } : {}),\n\t\t...(options.metadataFile ? { metadataFile: options.metadataFile } : {}),\n\t\t...(options.entry ? { entry: options.entry } : {}),\n\t\t...(options.contentType ? { contentType: options.contentType } : {}),\n\t\t...(options.path ? { path: options.path } : {}),\n\t\t...(options.idempotencyKey\n\t\t\t? { idempotencyKey: options.idempotencyKey }\n\t\t\t: {}),\n\t\t...(options.json !== undefined ? { json: options.json } : {}),\n\t\t...(options.quiet !== undefined ? { quiet: options.quiet } : {}),\n\t\t...(options.url !== undefined ? { url: options.url } : {}),\n\t\t...(options.ifRevision !== undefined\n\t\t\t? { ifRevision: options.ifRevision }\n\t\t\t: {}),\n\t\t...(options.fromJson ? { fromJson: options.fromJson } : {}),\n\t\t...(options.dryRun ? { dryRun: options.dryRun } : {}),\n\t};\n}\n\nfunction parseInteger(value: string): number {\n\tconst n = Number.parseInt(value, 10);\n\tif (Number.isNaN(n)) throw new InvalidArgumentError(\"Expected an integer.\");\n\treturn n;\n}\n\nasync function resolveCommandInput(\n\tinput: string,\n\tstdin?: AsyncIterable<string | Uint8Array>,\n): Promise<string> {\n\tif (input !== \"-\") return input;\n\tconst buf = await readStdinBytes(stdin ?? process.stdin);\n\treturn buf.toString(\"utf8\");\n}\n\nasync function resolvePublishInputs(\n\tinputs: string[],\n\tstdin?: AsyncIterable<string | Uint8Array>,\n\tstdinIsTTY?: boolean,\n): Promise<string | undefined> {\n\tif (inputs.length === 0) {\n\t\tif (stdinIsTTY) return undefined;\n\t\tconst buf = await readStdinBytes(stdin ?? process.stdin);\n\t\tif (buf.length === 0) return undefined;\n\t\treturn buf.toString(\"utf8\");\n\t}\n\tif (inputs.length === 1) {\n\t\tif (inputs[0] === \"-\") {\n\t\t\tconst buf = await readStdinBytes(stdin ?? process.stdin);\n\t\t\treturn buf.toString(\"utf8\");\n\t\t}\n\t\treturn inputs[0];\n\t}\n\tconst {\n\t\tmkdtemp,\n\t\tcopyFile,\n\t\twriteFile,\n\t\tstat: fsStat,\n\t} = await import(\"node:fs/promises\");\n\tconst { join, basename: pathBasename } = await import(\"node:path\");\n\tconst { tmpdir } = await import(\"node:os\");\n\tconst tmpDir = await mkdtemp(join(tmpdir(), \"dropthis-multi-\"));\n\tconst resolved: string[] = [];\n\tfor (const input of inputs) {\n\t\tif (input === \"-\") {\n\t\t\tconst buf = await readStdinBytes(stdin ?? process.stdin);\n\t\t\tconst tmpPath = join(tmpDir, `stdin-${Date.now()}`);\n\t\t\tawait writeFile(tmpPath, buf);\n\t\t\tresolved.push(tmpPath);\n\t\t} else {\n\t\t\tresolved.push(input);\n\t\t}\n\t}\n\tconst names = resolved.map((f) => pathBasename(f));\n\tconst dupes = names.filter((n, i) => names.indexOf(n) !== i);\n\tif (dupes.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Duplicate file names: ${[...new Set(dupes)].join(\", \")}. Rename files to avoid collisions.`,\n\t\t);\n\t}\n\tfor (const filePath of resolved) {\n\t\tconst info = await fsStat(filePath);\n\t\tif (info.isDirectory()) {\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot mix directories with multiple file arguments. Use a single folder instead: dropthis publish ${filePath}`,\n\t\t\t);\n\t\t}\n\t\tconst destName = pathBasename(filePath);\n\t\tawait copyFile(filePath, join(tmpDir, destName));\n\t}\n\treturn tmpDir;\n}\n\nasync function readStdinBytes(\n\tstdin: AsyncIterable<string | Uint8Array>,\n): Promise<Buffer> {\n\tconst chunks: Buffer[] = [];\n\tfor await (const chunk of stdin) {\n\t\tchunks.push(\n\t\t\ttypeof chunk === \"string\" ? Buffer.from(chunk) : Buffer.from(chunk),\n\t\t);\n\t}\n\treturn Buffer.concat(chunks);\n}\n","import type { CredentialStore } from \"./storage.js\";\n\nexport type ResolvedCredential = {\n\tapiKey: string;\n\tsource: \"flag\" | \"env\" | \"storage\";\n\tkeyId?: string;\n\tkeyLast4?: string;\n\taccountId?: string;\n\temail?: string;\n};\n\nexport async function resolveCredential(input: {\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstore: CredentialStore;\n}): Promise<ResolvedCredential | null> {\n\tif (input.apiKey) return { apiKey: input.apiKey, source: \"flag\" };\n\tif (input.env.DROPTHIS_API_KEY) {\n\t\treturn { apiKey: input.env.DROPTHIS_API_KEY, source: \"env\" };\n\t}\n\tconst stored = await input.store.read();\n\tif (!stored) return null;\n\treturn {\n\t\tapiKey: stored.apiKey,\n\t\tsource: \"storage\",\n\t\t...(stored.keyId ? { keyId: stored.keyId } : {}),\n\t\t...(stored.keyLast4 ? { keyLast4: stored.keyLast4 } : {}),\n\t\t...(stored.accountId ? { accountId: stored.accountId } : {}),\n\t\t...(stored.email ? { email: stored.email } : {}),\n\t};\n}\n\nexport function maskKey(apiKey: string): string {\n\treturn apiKey.length <= 8\n\t\t? \"sk_...\"\n\t\t: `${apiKey.slice(0, 3)}...${apiKey.slice(-4)}`;\n}\n","export type OutputMode = \"human\" | \"json\";\nexport type CliErrorCode =\n\t| \"api_error\"\n\t| \"auth_error\"\n\t| \"credential_storage_unavailable\"\n\t| \"generic_error\"\n\t| \"invalid_usage\"\n\t| \"local_input_error\"\n\t| \"network_error\";\n\nexport type Output = {\n\tmode: OutputMode;\n\tquiet: boolean;\n};\n\nexport type ApiErrorDetails = {\n\tcode?: string;\n\tmessage: string;\n\tstatusCode?: number | null;\n\tdetail?: unknown;\n\tparam?: string | null;\n\tcurrentRevision?: number;\n\trequestId?: string | null;\n};\n\nconst UPLOAD_NEXT_ACTIONS: Record<string, string> = {\n\tupload_expired: \"Create a new upload session and retry the publish.\",\n\tupload_already_used:\n\t\t\"Create a new upload session; upload sessions are single-use.\",\n\tupload_verification_failed:\n\t\t\"Re-upload the file bytes and complete the upload again.\",\n\ttoo_many_active_uploads:\n\t\t\"Cancel unused uploads or wait for expired uploads to be cleaned.\",\n\tupload_not_complete: \"Complete the upload session before publishing.\",\n};\n\nexport function createOutput(input: {\n\tjson?: boolean;\n\tquiet?: boolean;\n\tstdoutIsTTY: boolean;\n\tenv: Record<string, string | undefined>;\n}): Output {\n\tconst json =\n\t\tinput.json === true ||\n\t\tinput.quiet === true ||\n\t\tinput.stdoutIsTTY === false ||\n\t\tinput.env.CI === \"true\";\n\treturn { mode: json ? \"json\" : \"human\", quiet: input.quiet === true };\n}\n\nexport function successEnvelope<T>(data: T): { ok: true; data: T } {\n\treturn { ok: true, data };\n}\n\nexport function errorEnvelope(\n\tcode: CliErrorCode,\n\tmessage: string,\n\tnextAction?: string,\n): {\n\tok: false;\n\terror: { code: CliErrorCode; message: string; next_action?: string };\n} {\n\treturn {\n\t\tok: false,\n\t\terror: {\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\t...(nextAction ? { next_action: nextAction } : {}),\n\t\t},\n\t};\n}\n\nexport function apiErrorEnvelope(error: ApiErrorDetails): {\n\tok: false;\n\terror: Record<string, unknown>;\n} {\n\treturn {\n\t\tok: false,\n\t\terror: {\n\t\t\tcode: error.code ?? \"api_error\",\n\t\t\tmessage: error.message,\n\t\t\t...(error.statusCode !== undefined ? { status: error.statusCode } : {}),\n\t\t\t...(typeof error.detail === \"string\" ? { detail: error.detail } : {}),\n\t\t\t...(error.param ? { param: error.param } : {}),\n\t\t\t...(error.currentRevision !== undefined\n\t\t\t\t? { current_revision: error.currentRevision }\n\t\t\t\t: {}),\n\t\t\t...(error.requestId ? { request_id: error.requestId } : {}),\n\t\t\tnext_action: nextActionForApiError(error),\n\t\t},\n\t};\n}\n\nfunction nextActionForApiError(error: ApiErrorDetails): string {\n\tconst uploadNextAction = error.code\n\t\t? UPLOAD_NEXT_ACTIONS[error.code]\n\t\t: undefined;\n\tif (uploadNextAction) return uploadNextAction;\n\tif (error.code === \"revision_conflict\") {\n\t\treturn \"Fetch the drop, merge your changes, and retry with the current revision.\";\n\t}\n\tif (error.statusCode === 401 || error.code === \"missing_api_key\") {\n\t\treturn \"Authenticate with dropthis login or set DROPTHIS_API_KEY.\";\n\t}\n\tif (error.statusCode === 413 || error.code === \"quota_exceeded\") {\n\t\treturn \"Reduce the upload size or upgrade the account limit.\";\n\t}\n\tif (error.statusCode === 422) {\n\t\treturn \"Fix the input shown in the error detail and retry.\";\n\t}\n\tif (\n\t\terror.statusCode !== undefined &&\n\t\terror.statusCode !== null &&\n\t\terror.statusCode >= 500\n\t) {\n\t\treturn \"Retry the request with the same idempotency key, or contact support with the request id.\";\n\t}\n\treturn \"Fix the request or retry after checking the drop state.\";\n}\n\nexport function exitCodeFor(code: CliErrorCode): number {\n\tif (code === \"invalid_usage\") return 2;\n\tif (code === \"auth_error\") return 3;\n\tif (code === \"local_input_error\") return 4;\n\tif (code === \"network_error\") return 5;\n\treturn 1;\n}\n","import pc from \"picocolors\";\n\nexport const symbols = {\n\tsuccess: \"✓\",\n\terror: \"✗\",\n\twarning: \"!\",\n} as const;\n\nexport function success(msg: string): string {\n\treturn `${pc.green(symbols.success)} ${msg}`;\n}\n\nexport function error(msg: string): string {\n\treturn `${pc.red(symbols.error)} ${msg}`;\n}\n\nexport function warn(msg: string): string {\n\treturn `${pc.yellow(symbols.warning)} ${msg}`;\n}\n\nexport function hint(msg: string): string {\n\treturn ` ${pc.dim(msg)}`;\n}\n\nexport function url(u: string): string {\n\treturn pc.cyan(u);\n}\n\nexport function label(key: string, value: string): string {\n\treturn `${pc.dim(`${key}:`)} ${value}`;\n}\n\nexport function kvLines(pairs: Array<[key: string, value: string]>): string {\n\tif (pairs.length === 0) return \"\";\n\tconst maxKey = Math.max(...pairs.map(([k]) => k.length));\n\treturn pairs\n\t\t.map(([k, v]) => ` ${pc.dim(`${k.padEnd(maxKey)}:`)} ${v}`)\n\t\t.join(\"\\n\");\n}\n","import type { ApiErrorDetails } from \"./output.js\";\nimport {\n\tapiErrorEnvelope,\n\ttype CliErrorCode,\n\terrorEnvelope,\n\texitCodeFor,\n} from \"./output.js\";\nimport { error, hint, kvLines, success, url } from \"./ui.js\";\n\ntype WriterDeps = {\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport function writeSuccess(\n\tdeps: WriterDeps,\n\tmessage: string,\n\tlink?: string,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tconst text = link ? `${message} ${url(link)}` : message;\n\t\tdeps.stdout(`${success(text)}\\n`);\n\t}\n}\n\nexport function writeUrl(deps: WriterDeps, link: string): void {\n\tdeps.stdout(`${url(link)}\\n`);\n}\n\nexport function writeResult(\n\tdeps: WriterDeps,\n\tlink: string,\n\tverb: string,\n\tdata: Record<string, unknown>,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stdout(`${success(`${verb} ${url(link)}`)}\\n`);\n\t} else {\n\t\tdeps.stdout(`${JSON.stringify({ ok: true, drop: data })}\\n`);\n\t}\n}\n\nexport function writeJson(\n\tdeps: WriterDeps,\n\tenvelope: Record<string, unknown>,\n): void {\n\tdeps.stdout(`${JSON.stringify(envelope)}\\n`);\n}\n\nexport function writeKv(\n\tdeps: WriterDeps,\n\tpairs: Array<[string, string]>,\n\tjson: Record<string, unknown>,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stdout(`${kvLines(pairs)}\\n`);\n\t} else {\n\t\tdeps.stdout(`${JSON.stringify(json)}\\n`);\n\t}\n}\n\nexport function writeHumanOrJson(\n\tdeps: WriterDeps,\n\thumanText: string,\n\tjson: Record<string, unknown>,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stdout(`${humanText}\\n`);\n\t} else {\n\t\tdeps.stdout(`${JSON.stringify(json)}\\n`);\n\t}\n}\n\nexport function writeError(\n\tdeps: WriterDeps,\n\tcode: CliErrorCode,\n\tmessage: string,\n\tnextAction?: string,\n): { exitCode: number } {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stderr(`${error(message)}\\n`);\n\t\tif (nextAction) deps.stderr(`${hint(nextAction)}\\n`);\n\t} else {\n\t\tdeps.stderr(\n\t\t\t`${JSON.stringify(errorEnvelope(code, message, nextAction))}\\n`,\n\t\t);\n\t}\n\treturn { exitCode: exitCodeFor(code) };\n}\n\nexport function writeApiError(\n\tdeps: WriterDeps,\n\tdetails: ApiErrorDetails,\n): { exitCode: number } {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stderr(`${error(details.message)}\\n`);\n\t\tconst nextAction = details.requestId\n\t\t\t? `Request ID: ${details.requestId}`\n\t\t\t: undefined;\n\t\tif (nextAction) deps.stderr(`${hint(nextAction)}\\n`);\n\t} else {\n\t\tdeps.stderr(`${JSON.stringify(apiErrorEnvelope(details))}\\n`);\n\t}\n\treturn { exitCode: exitCodeFor(\"api_error\") };\n}\n\nexport function writeApiErrorSimple(\n\tdeps: WriterDeps,\n\tmessage: string,\n): { exitCode: number } {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stderr(`${error(message)}\\n`);\n\t} else {\n\t\tdeps.stderr(`${JSON.stringify(errorEnvelope(\"api_error\", message))}\\n`);\n\t}\n\treturn { exitCode: exitCodeFor(\"api_error\") };\n}\n\nexport function writeAuthError(deps: WriterDeps): { exitCode: number } {\n\treturn writeError(\n\t\tdeps,\n\t\t\"auth_error\",\n\t\t\"No API key found.\",\n\t\t\"Set DROPTHIS_API_KEY or run dropthis login.\",\n\t);\n}\n\nexport function writeEmpty(\n\tdeps: WriterDeps,\n\tmessage: string,\n\tjson: Record<string, unknown>,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stdout(`${message}\\n`);\n\t} else {\n\t\tdeps.stdout(`${JSON.stringify(json)}\\n`);\n\t}\n}\n","import { resolveCredential } from \"../auth.js\";\nimport { writeApiErrorSimple, writeAuthError, writeKv } from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype AccountClient = {\n\taccount: { get(): Promise<SdkResult<unknown>> };\n};\n\ntype CommandDeps = {\n\tstore: CredentialStore;\n\tclient: AccountClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runAccountGet(\n\t_input: { json?: boolean },\n\tdeps: CommandDeps,\n): Promise<{ exitCode: number }> {\n\tif (\n\t\t(await resolveCredential({\n\t\t\t...(deps.apiKey ? { apiKey: deps.apiKey } : {}),\n\t\t\tenv: deps.env,\n\t\t\tstore: deps.store,\n\t\t})) === null\n\t) {\n\t\treturn writeAuthError(deps);\n\t}\n\tconst result = await deps.client.account.get();\n\tif (result.error) {\n\t\treturn writeApiErrorSimple(deps, result.error.message);\n\t}\n\tconst data = result.data as Record<string, unknown> | null;\n\tconst pairs: Array<[string, string]> = [];\n\tif (data?.id) pairs.push([\"ID\", String(data.id)]);\n\tif (data?.email) pairs.push([\"Email\", String(data.email)]);\n\tif (data?.plan) pairs.push([\"Plan\", String(data.plan)]);\n\n\twriteKv(deps, pairs, { ok: true, account: result.data });\n\treturn { exitCode: 0 };\n}\n","import * as prompts from \"@clack/prompts\";\nimport { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiErrorSimple,\n\twriteAuthError,\n\twriteEmpty,\n\twriteError,\n\twriteHumanOrJson,\n\twriteJson,\n\twriteKv,\n} from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { success } from \"../ui.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype ApiKeysCreateClient = {\n\tapiKeys: {\n\t\tcreate(input: {\n\t\t\tlabel: string;\n\t\t}): Promise<SdkResult<Record<string, unknown>>>;\n\t};\n};\n\ntype ApiKeysListClient = {\n\tapiKeys: {\n\t\tlist(): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype ApiKeysDeleteClient = {\n\tapiKeys: {\n\t\tdelete(\n\t\t\tkeyId: string,\n\t\t): Promise<SdkResult<null>> | SdkResult<null> | undefined;\n\t};\n};\n\ntype CommandDeps<TClient> = {\n\tstore: CredentialStore;\n\tclient: TClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runApiKeysCreate(\n\tinput: { label: string; json?: boolean },\n\tdeps: CommandDeps<ApiKeysCreateClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.apiKeys.create({ label: input.label });\n\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\tconst data = result.data;\n\tconst pairs: Array<[string, string]> = [];\n\tif (data.id) pairs.push([\"ID\", String(data.id)]);\n\tif (data.key) pairs.push([\"Key\", String(data.key)]);\n\tif (data.last4) pairs.push([\"Last 4\", String(data.last4)]);\n\twriteKv(deps, pairs, { ok: true, api_key: result.data });\n\treturn { exitCode: 0 };\n}\n\nexport async function runApiKeysList(\n\t_input: { json?: boolean },\n\tdeps: CommandDeps<ApiKeysListClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.apiKeys.list();\n\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\tconst raw = listItems(result.data);\n\tconst items = Array.isArray(raw)\n\t\t? (raw as Array<Record<string, unknown>>)\n\t\t: undefined;\n\tif (deps.outputMode === \"human\") {\n\t\tif (!items || items.length === 0) {\n\t\t\twriteEmpty(deps, \"No API keys found.\", { ok: true, api_keys: [] });\n\t\t} else {\n\t\t\tfor (const item of items) {\n\t\t\t\tdeps.stdout(\n\t\t\t\t\t`${item.id ?? \"\"} ${item.label ?? \"\"} ...${item.last4 ?? \"\"}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} else {\n\t\twriteJson(deps, { ok: true, api_keys: items ?? raw });\n\t}\n\treturn { exitCode: 0 };\n}\n\nexport async function runApiKeysDelete(\n\tkeyId: string,\n\tinput: { yes?: boolean; json?: boolean; interactive?: boolean },\n\tdeps: CommandDeps<ApiKeysDeleteClient>,\n): Promise<{ exitCode: number }> {\n\tif (!input.yes && input.interactive === false) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\t\"Pass --yes to delete in non-interactive mode.\",\n\t\t);\n\t}\n\tif (!input.yes && input.interactive !== false) {\n\t\tconst confirmed = await prompts.confirm({\n\t\t\tmessage: `Delete API key ${keyId}?`,\n\t\t});\n\t\tif (prompts.isCancel(confirmed) || !confirmed) {\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\t}\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.apiKeys.delete(keyId);\n\tif (result?.error) return writeApiErrorSimple(deps, result.error.message);\n\twriteHumanOrJson(deps, success(`Deleted ${keyId}`), {\n\t\tok: true,\n\t\tdeleted: true,\n\t\tid: keyId,\n\t});\n\treturn { exitCode: 0 };\n}\n\nasync function hasCredential(deps: CommandDeps<unknown>): Promise<boolean> {\n\treturn (\n\t\t(await resolveCredential({\n\t\t\t...(deps.apiKey ? { apiKey: deps.apiKey } : {}),\n\t\t\tenv: deps.env,\n\t\t\tstore: deps.store,\n\t\t})) !== null\n\t);\n}\n\nfunction listItems(data: unknown): unknown {\n\tif (data && typeof data === \"object\" && \"data\" in data) {\n\t\treturn (data as { data: unknown }).data;\n\t}\n\tif (data && typeof data === \"object\" && \"apiKeys\" in data) {\n\t\treturn (data as { apiKeys: unknown }).apiKeys;\n\t}\n\treturn data;\n}\n","const COMMANDS = [\n\t{\n\t\tname: \"publish\",\n\t\tdescription: \"Publish an input and return a Dropthis URL.\",\n\t\targuments: [\"input\"],\n\t\toptions: [\"--json\", \"--url\", \"--dry-run\", \"--title\", \"--metadata\"],\n\t\texamples: [\n\t\t\t\"dropthis publish ./site --json\",\n\t\t\t\"dropthis publish ./site --url\",\n\t\t\t\"dropthis publish ./dist --dry-run\",\n\t\t],\n\t},\n\t{\n\t\tname: \"update\",\n\t\tdescription: \"Update an existing drop by id.\",\n\t\targuments: [\"target\", \"input\"],\n\t\toptions: [\"--json\", \"--url\", \"--dry-run\", \"--if-revision\"],\n\t\texamples: [\n\t\t\t\"dropthis update drop_abc ./site --json\",\n\t\t\t\"dropthis update drop_abc --title 'New Title' --dry-run\",\n\t\t],\n\t},\n\t{\n\t\tname: \"deployments list <dropId>\",\n\t\tdescription: \"List deployments for a drop.\",\n\t\targuments: [\"dropId\"],\n\t\toptions: [\"--json\", \"--limit\", \"--cursor\"],\n\t\tauth: \"required\",\n\t\texamples: [\"dropthis deployments list drop_abc --json\"],\n\t},\n\t{\n\t\tname: \"deployments get <dropId> <deploymentId>\",\n\t\tdescription: \"Get deployment details for a drop.\",\n\t\targuments: [\"dropId\", \"deploymentId\"],\n\t\toptions: [\"--json\"],\n\t\tauth: \"required\",\n\t\texamples: [\"dropthis deployments get drop_abc dep_abc --json\"],\n\t},\n\t{\n\t\tname: \"drops\",\n\t\tdescription: \"List, inspect, update, and delete drops.\",\n\t\texamples: [\"dropthis drops list --json\"],\n\t},\n\t{\n\t\tname: \"api-keys\",\n\t\tdescription: \"Create, list, and delete API keys.\",\n\t\texamples: [\"dropthis api-keys create --label CI --json\"],\n\t},\n\t{\n\t\tname: \"login\",\n\t\tdescription: \"Authenticate with email OTP and store an API key.\",\n\t\texamples: [\n\t\t\t\"dropthis login verify --email user@example.com --otp 123456 --json\",\n\t\t],\n\t},\n\t{\n\t\tname: \"logout\",\n\t\tdescription: \"Remove stored local credentials.\",\n\t\texamples: [\"dropthis logout --json\"],\n\t},\n\t{\n\t\tname: \"whoami\",\n\t\tdescription: \"Show current auth source and credential metadata.\",\n\t\texamples: [\"dropthis whoami --json\"],\n\t},\n\t{\n\t\tname: \"account\",\n\t\tdescription: \"Get account details.\",\n\t\texamples: [\"dropthis account get --json\"],\n\t},\n\t{\n\t\tname: \"doctor\",\n\t\tdescription: \"Report local CLI diagnostics.\",\n\t\texamples: [\"dropthis doctor --json\"],\n\t},\n\t{\n\t\tname: \"commands\",\n\t\tdescription: \"Print this machine-readable command tree.\",\n\t\texamples: [\"dropthis commands --json\"],\n\t},\n];\n\nexport async function runCommands(\n\t_input: { json?: boolean },\n\tdeps: { stdout: (value: string) => void },\n): Promise<{ exitCode: number }> {\n\tdeps.stdout(\n\t\t`${JSON.stringify({\n\t\t\tok: true,\n\t\t\toutput: \"JSON by default in CI, pipes, non-TTY, --json, or --quiet.\",\n\t\t\tcommands: COMMANDS,\n\t\t})}\\n`,\n\t);\n\treturn { exitCode: 0 };\n}\n","import { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiError,\n\twriteAuthError,\n\twriteEmpty,\n\twriteJson,\n\twriteKv,\n} from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\ntype ApiError = {\n\tmessage: string;\n\tcode?: string;\n\tstatusCode?: number | null;\n\tdetail?: unknown;\n\tparam?: string | null;\n\trequestId?: string | null;\n};\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| { data: null; error: ApiError; headers?: Record<string, string> };\n\ntype DeploymentsClient = {\n\tdeployments: {\n\t\tlist(\n\t\t\tdropId: string,\n\t\t\tparams?: { limit?: number; cursor?: string },\n\t\t): Promise<SdkResult<unknown>>;\n\t\tget(dropId: string, deploymentId: string): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype Deps = {\n\tstore: CredentialStore;\n\tclient: DeploymentsClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runDeploymentsList(\n\tdropId: string,\n\tinput: { limit?: number; cursor?: string; json?: boolean },\n\tdeps: Deps,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst params = {\n\t\t...(input.limit !== undefined ? { limit: input.limit } : {}),\n\t\t...(input.cursor ? { cursor: input.cursor } : {}),\n\t};\n\tconst result = await deps.client.deployments.list(dropId, params);\n\tif (result.error) {\n\t\treturn writeApiError(deps, result.error);\n\t}\n\tconst spread = spreadData(result.data);\n\tconst items = (spread.deployments ?? spread.data ?? result.data) as\n\t\t| Array<Record<string, unknown>>\n\t\t| undefined;\n\tif (deps.outputMode === \"human\") {\n\t\tif (!items || (Array.isArray(items) && items.length === 0)) {\n\t\t\twriteEmpty(deps, \"No deployments found.\", {\n\t\t\t\tok: true,\n\t\t\t\t...spread,\n\t\t\t});\n\t\t} else if (Array.isArray(items)) {\n\t\t\tfor (const item of items) {\n\t\t\t\tdeps.stdout(\n\t\t\t\t\t`${item.id ?? \"\"} rev ${item.revision ?? \"?\"} ${item.created_at ?? \"\"}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\twriteJson(deps, { ok: true, ...spread });\n\t\t}\n\t} else {\n\t\twriteJson(deps, { ok: true, ...spread });\n\t}\n\treturn { exitCode: 0 };\n}\n\nexport async function runDeploymentsGet(\n\tdropId: string,\n\tdeploymentId: string,\n\t_input: { json?: boolean },\n\tdeps: Deps,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.deployments.get(dropId, deploymentId);\n\tif (result.error) {\n\t\treturn writeApiError(deps, result.error);\n\t}\n\tconst data = result.data as Record<string, unknown>;\n\tconst pairs: Array<[string, string]> = [];\n\tif (data.id) pairs.push([\"ID\", String(data.id)]);\n\tif (data.revision !== undefined)\n\t\tpairs.push([\"Revision\", String(data.revision)]);\n\tif (data.created_at) pairs.push([\"Created\", String(data.created_at)]);\n\twriteKv(deps, pairs, { ok: true, deployment: result.data });\n\treturn { exitCode: 0 };\n}\n\nasync function hasCredential(\n\tdeps: Pick<Deps, \"apiKey\" | \"env\" | \"store\">,\n): Promise<boolean> {\n\treturn (\n\t\t(await resolveCredential({\n\t\t\t...(deps.apiKey ? { apiKey: deps.apiKey } : {}),\n\t\t\tenv: deps.env,\n\t\t\tstore: deps.store,\n\t\t})) !== null\n\t);\n}\n\nfunction spreadData(data: unknown): Record<string, unknown> {\n\treturn data && typeof data === \"object\"\n\t\t? (data as Record<string, unknown>)\n\t\t: { data };\n}\n","import { resolveCredential } from \"../auth.js\";\nimport { writeKv } from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\ntype CommandDeps = {\n\tstore: CredentialStore;\n\tclient: unknown;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runDoctor(\n\t_input: { json?: boolean },\n\tdeps: CommandDeps,\n): Promise<{ exitCode: number }> {\n\tconst stored = await deps.store.read();\n\tconst credential = await resolveCredential({\n\t\tenv: deps.env,\n\t\tstore: deps.store,\n\t});\n\tconst authSource = credential?.source ?? \"missing\";\n\tconst storageBackend = stored?.storage ?? \"none\";\n\n\tconst pairs: Array<[string, string]> = [\n\t\t[\"Version\", PKG_VERSION],\n\t\t[\"Auth\", authSource],\n\t\t[\"Storage\", storageBackend],\n\t];\n\n\twriteKv(deps, pairs, {\n\t\tok: true,\n\t\tversion: PKG_VERSION,\n\t\tauth: { source: authSource },\n\t\tstorage: { backend: storageBackend },\n\t});\n\treturn { exitCode: 0 };\n}\n","import * as prompts from \"@clack/prompts\";\nimport { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiErrorSimple,\n\twriteAuthError,\n\twriteEmpty,\n\twriteError,\n\twriteHumanOrJson,\n\twriteJson,\n\twriteKv,\n} from \"../fmt.js\";\nimport { parseDropOptions, type RawDropOptions } from \"../options.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { url as fmtUrl, success } from \"../ui.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype DropsListClient = {\n\tdrops: {\n\t\tlist(params: {\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t}): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype DropsGetClient = {\n\tdrops: {\n\t\tget(dropId: string): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype DropsUpdateClient = {\n\tdrops: {\n\t\tupdate(\n\t\t\tdropId: string,\n\t\t\tinput: Record<string, unknown>,\n\t\t): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype DropsDeleteClient = {\n\tdrops: {\n\t\tdelete(\n\t\t\tdropId: string,\n\t\t): Promise<SdkResult<null>> | SdkResult<null> | undefined;\n\t};\n};\n\ntype CommandDeps<TClient> = {\n\tstore: CredentialStore;\n\tclient: TClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runDropsList(\n\tinput: { limit?: number; cursor?: string; json?: boolean },\n\tdeps: CommandDeps<DropsListClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst params = {\n\t\t...(input.limit !== undefined ? { limit: input.limit } : {}),\n\t\t...(input.cursor ? { cursor: input.cursor } : {}),\n\t};\n\tconst result = await deps.client.drops.list(params);\n\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\tconst raw = listItems(result.data);\n\tconst items = Array.isArray(raw)\n\t\t? (raw as Array<Record<string, unknown>>)\n\t\t: undefined;\n\tif (deps.outputMode === \"human\") {\n\t\tif (!items || items.length === 0) {\n\t\t\twriteEmpty(deps, \"No drops found.\", { ok: true, drops: [] });\n\t\t} else {\n\t\t\tfor (const item of items) {\n\t\t\t\tdeps.stdout(\n\t\t\t\t\t`${item.id ?? \"\"} ${item.title ?? \"\"} ${item.url ? fmtUrl(String(item.url)) : \"\"}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} else {\n\t\twriteJson(deps, { ok: true, drops: items ?? raw });\n\t}\n\treturn { exitCode: 0 };\n}\n\nexport async function runDropsGet(\n\tdropId: string,\n\t_input: { json?: boolean },\n\tdeps: CommandDeps<DropsGetClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.drops.get(dropId);\n\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\tconst data = result.data as Record<string, unknown>;\n\tconst pairs: Array<[string, string]> = [];\n\tif (data.id) pairs.push([\"ID\", String(data.id)]);\n\tif (data.url) pairs.push([\"URL\", fmtUrl(String(data.url))]);\n\tif (data.title) pairs.push([\"Title\", String(data.title)]);\n\tif (data.visibility) pairs.push([\"Visibility\", String(data.visibility)]);\n\tif (data.revision !== undefined)\n\t\tpairs.push([\"Revision\", String(data.revision)]);\n\tif (data.created_at) pairs.push([\"Created\", String(data.created_at)]);\n\twriteKv(deps, pairs, { ok: true, drop: result.data });\n\treturn { exitCode: 0 };\n}\n\nexport async function runDropsUpdate(\n\tdropId: string,\n\tinput: RawDropOptions & { json?: boolean },\n\tdeps: CommandDeps<DropsUpdateClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\ttry {\n\t\tconst options = await parseDropOptions(input);\n\t\tconst result = await deps.client.drops.update(dropId, options);\n\t\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\t\twriteHumanOrJson(deps, success(`Updated ${dropId}`), {\n\t\t\tok: true,\n\t\t\tdrop: result.data,\n\t\t});\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\terror instanceof Error ? error.message : \"Invalid drop options.\",\n\t\t);\n\t}\n}\n\nexport async function runDropsDelete(\n\tdropId: string,\n\tinput: { yes?: boolean; json?: boolean; interactive?: boolean },\n\tdeps: CommandDeps<DropsDeleteClient>,\n): Promise<{ exitCode: number }> {\n\tif (!input.yes && input.interactive === false) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\t\"Pass --yes to delete in non-interactive mode.\",\n\t\t);\n\t}\n\tif (!input.yes && input.interactive !== false) {\n\t\tconst confirmed = await prompts.confirm({\n\t\t\tmessage: `Delete ${dropId}?`,\n\t\t});\n\t\tif (prompts.isCancel(confirmed) || !confirmed) {\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\t}\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.drops.delete(dropId);\n\tif (result?.error) return writeApiErrorSimple(deps, result.error.message);\n\twriteHumanOrJson(deps, success(`Deleted ${dropId}`), {\n\t\tok: true,\n\t\tdeleted: true,\n\t\tid: dropId,\n\t});\n\treturn { exitCode: 0 };\n}\n\nasync function hasCredential(deps: CommandDeps<unknown>): Promise<boolean> {\n\treturn (\n\t\t(await resolveCredential({\n\t\t\t...(deps.apiKey ? { apiKey: deps.apiKey } : {}),\n\t\t\tenv: deps.env,\n\t\t\tstore: deps.store,\n\t\t})) !== null\n\t);\n}\n\nfunction listItems(data: unknown): unknown {\n\tif (data && typeof data === \"object\" && \"data\" in data) {\n\t\treturn (data as { data: unknown }).data;\n\t}\n\tif (data && typeof data === \"object\" && \"drops\" in data) {\n\t\treturn (data as { drops: unknown }).drops;\n\t}\n\treturn data;\n}\n","import { readFile } from \"node:fs/promises\";\n\nexport type RawDropOptions = {\n\tslug?: string;\n\ttitle?: string;\n\tvisibility?: \"public\" | \"unlisted\";\n\tpassword?: string;\n\tnoPassword?: boolean;\n\tnoindex?: boolean;\n\tindex?: boolean;\n\texpiresAt?: string;\n\tmetadata?: string;\n\tmetadataFile?: string;\n\tentry?: string;\n\tcontentType?: string;\n\tpath?: string;\n\tidempotencyKey?: string;\n};\n\nexport type ParsedDropOptions = {\n\tslug?: string;\n\ttitle?: string;\n\tvisibility?: \"public\" | \"unlisted\";\n\tpassword?: string | null;\n\tnoindex?: boolean;\n\texpiresAt?: string;\n\tmetadata?: Record<string, unknown>;\n\tentry?: string;\n\tcontentType?: string;\n\tpath?: string;\n\tidempotencyKey?: string;\n};\n\nexport async function parseDropOptions(\n\traw: RawDropOptions,\n): Promise<ParsedDropOptions> {\n\tif (raw.metadata && raw.metadataFile) {\n\t\tthrow new Error(\"Use either --metadata or --metadata-file, not both.\");\n\t}\n\tif (raw.password && raw.noPassword) {\n\t\tthrow new Error(\"Use either --password or --no-password, not both.\");\n\t}\n\tif (raw.noindex && raw.index) {\n\t\tthrow new Error(\"Use either --noindex or --index, not both.\");\n\t}\n\tconst metadata = raw.metadata\n\t\t? parseJsonObject(raw.metadata, \"--metadata\")\n\t\t: raw.metadataFile\n\t\t\t? parseJsonObject(\n\t\t\t\t\tawait readFile(raw.metadataFile, \"utf8\"),\n\t\t\t\t\t\"--metadata-file\",\n\t\t\t\t)\n\t\t\t: undefined;\n\treturn {\n\t\t...(raw.slug ? { slug: raw.slug } : {}),\n\t\t...(raw.title ? { title: raw.title } : {}),\n\t\t...(raw.visibility ? { visibility: raw.visibility } : {}),\n\t\t...(raw.password ? { password: raw.password } : {}),\n\t\t...(raw.noPassword ? { password: null } : {}),\n\t\t...(raw.noindex ? { noindex: true } : {}),\n\t\t...(raw.index ? { noindex: false } : {}),\n\t\t...(raw.expiresAt ? { expiresAt: raw.expiresAt } : {}),\n\t\t...(metadata ? { metadata } : {}),\n\t\t...(raw.entry ? { entry: raw.entry } : {}),\n\t\t...(raw.contentType ? { contentType: raw.contentType } : {}),\n\t\t...(raw.path ? { path: raw.path } : {}),\n\t\t...(raw.idempotencyKey ? { idempotencyKey: raw.idempotencyKey } : {}),\n\t};\n}\n\nfunction parseJsonObject(\n\tvalue: string,\n\tlabel: string,\n): Record<string, unknown> {\n\tconst parsed = JSON.parse(value) as unknown;\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`${label} must be a JSON object.`);\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n","import * as prompts from \"@clack/prompts\";\nimport { errorEnvelope, exitCodeFor } from \"../output.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype OtpRequestData = {\n\tok: true;\n\texpiresIn: number;\n};\n\ntype SessionData = {\n\ttoken: string;\n\taccountId: string;\n\tisNewAccount: boolean;\n};\n\ntype ApiKeyData = {\n\tid: string;\n\tkey: string;\n\tkeyLast4: string;\n\taccountId?: string | null;\n\tisNewAccount?: boolean;\n};\n\ntype LoginRequestClient = {\n\tauth: {\n\t\trequestEmailOtp(input: {\n\t\t\temail: string;\n\t\t}): Promise<SdkResult<OtpRequestData>>;\n\t};\n};\n\ntype LoginClient = {\n\tauth: {\n\t\tverifyEmailOtp(input: {\n\t\t\temail: string;\n\t\t\tcode: string;\n\t\t}): Promise<SdkResult<SessionData>>;\n\t};\n\tapiKeys: {\n\t\tcreate(input: { label: string }): Promise<SdkResult<ApiKeyData>>;\n\t};\n};\n\ntype LoginInteractiveClient = LoginRequestClient & LoginClient;\n\nexport async function runLoginInteractive(deps: {\n\tclient: LoginInteractiveClient;\n\tcreateClient: (apiKey: string) => LoginInteractiveClient;\n\tstore: CredentialStore;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n}): Promise<{ exitCode: number }> {\n\tprompts.intro(\"dropthis login\");\n\n\tconst email = await prompts.text({\n\t\tmessage: \"Email address\",\n\t\tvalidate: (v) => (v?.includes(\"@\") ? undefined : \"Enter a valid email\"),\n\t});\n\tif (prompts.isCancel(email)) {\n\t\tprompts.cancel(\"Login cancelled.\");\n\t\treturn { exitCode: 0 };\n\t}\n\n\tconst requestResult = await deps.client.auth.requestEmailOtp({ email });\n\tif (requestResult.error) {\n\t\tprompts.cancel(requestResult.error.message);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\n\tconst otp = await prompts.text({\n\t\tmessage: \"Paste the code from your email\",\n\t});\n\tif (prompts.isCancel(otp)) {\n\t\tprompts.cancel(\"Login cancelled.\");\n\t\treturn { exitCode: 0 };\n\t}\n\n\tconst session = await deps.client.auth.verifyEmailOtp({ email, code: otp });\n\tif (session.error) {\n\t\tprompts.cancel(session.error.message);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\n\tconst authedClient = deps.createClient(session.data.token);\n\tconst apiKey = await authedClient.apiKeys.create({ label: \"CLI\" });\n\tif (apiKey.error) {\n\t\tprompts.cancel(apiKey.error.message);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\n\tawait deps.store.save({\n\t\tapiKey: apiKey.data.key,\n\t\tkeyId: apiKey.data.id,\n\t\tkeyLast4: apiKey.data.keyLast4,\n\t\taccountId: apiKey.data.accountId ?? session.data.accountId,\n\t\temail,\n\t\tstorage: \"secure\",\n\t});\n\n\tprompts.outro(\"Logged in successfully.\");\n\treturn { exitCode: 0 };\n}\n\nexport async function runLoginRequest(\n\tinput: { email: string; json?: boolean },\n\tdeps: {\n\t\tclient: LoginRequestClient;\n\t\tstdout: (value: string) => void;\n\t\tstderr: (value: string) => void;\n\t},\n): Promise<{ exitCode: number }> {\n\tconst result = await deps.client.auth.requestEmailOtp({\n\t\temail: input.email,\n\t});\n\tif (result.error) {\n\t\tdeps.stderr(\n\t\t\t`${JSON.stringify(errorEnvelope(\"api_error\", result.error.message))}\\n`,\n\t\t);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\tdeps.stdout(\n\t\t`${JSON.stringify({\n\t\t\tok: true,\n\t\t\temail: input.email,\n\t\t\texpires_in: result.data.expiresIn,\n\t\t})}\\n`,\n\t);\n\treturn { exitCode: 0 };\n}\n\nexport async function runLoginVerify(\n\tinput: { email: string; otp: string; json?: boolean },\n\tdeps: {\n\t\tclient: LoginClient;\n\t\tcreateClient: (apiKey: string) => LoginClient;\n\t\tstore: CredentialStore;\n\t\tstdout: (value: string) => void;\n\t\tstderr: (value: string) => void;\n\t},\n): Promise<{ exitCode: number }> {\n\tconst session = await deps.client.auth.verifyEmailOtp({\n\t\temail: input.email,\n\t\tcode: input.otp,\n\t});\n\tif (session.error) {\n\t\tdeps.stderr(\n\t\t\t`${JSON.stringify(errorEnvelope(\"api_error\", session.error.message))}\\n`,\n\t\t);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\tconst authedClient = deps.createClient(session.data.token);\n\tconst apiKey = await authedClient.apiKeys.create({ label: \"CLI\" });\n\tif (apiKey.error) {\n\t\tdeps.stderr(\n\t\t\t`${JSON.stringify(errorEnvelope(\"api_error\", apiKey.error.message))}\\n`,\n\t\t);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\tawait deps.store.save({\n\t\tapiKey: apiKey.data.key,\n\t\tkeyId: apiKey.data.id,\n\t\tkeyLast4: apiKey.data.keyLast4,\n\t\taccountId: apiKey.data.accountId ?? session.data.accountId,\n\t\temail: input.email,\n\t\tstorage: \"secure\",\n\t});\n\tdeps.stdout(\n\t\t`${JSON.stringify({\n\t\t\tok: true,\n\t\t\taccount_id: apiKey.data.accountId ?? session.data.accountId,\n\t\t\tkey_id: apiKey.data.id,\n\t\t\tkey_last4: apiKey.data.keyLast4,\n\t\t\tis_new_account: apiKey.data.isNewAccount ?? session.data.isNewAccount,\n\t\t})}\\n`,\n\t);\n\treturn { exitCode: 0 };\n}\n","import { writeApiErrorSimple, writeHumanOrJson } from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { success } from \"../ui.js\";\n\ntype DeleteResult =\n\t| { data: null; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype LogoutClient = {\n\tapiKeys: {\n\t\tdelete(\n\t\t\tkeyId: string,\n\t\t): DeleteResult | Promise<DeleteResult> | undefined | Promise<undefined>;\n\t};\n};\n\nexport async function runLogout(\n\tinput: { json?: boolean; revoke?: boolean },\n\tdeps: {\n\t\tstore: CredentialStore;\n\t\tclient: LogoutClient;\n\t\tstdout: (value: string) => void;\n\t\tstderr: (value: string) => void;\n\t\toutputMode?: \"human\" | \"json\";\n\t},\n): Promise<{ exitCode: number }> {\n\tconst stored = await deps.store.read();\n\tlet revokeError: string | undefined;\n\tif (input.revoke && stored?.keyId) {\n\t\tconst result = await deps.client.apiKeys.delete(stored.keyId);\n\t\tif (result?.error) revokeError = result.error.message;\n\t}\n\tif (revokeError) {\n\t\treturn writeApiErrorSimple(deps, revokeError);\n\t}\n\tawait deps.store.clear();\n\twriteHumanOrJson(deps, success(\"Logged out.\"), { ok: true });\n\treturn { exitCode: 0 };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { stat } from \"node:fs/promises\";\nimport { basename, extname } from \"node:path\";\nimport { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiError,\n\twriteAuthError,\n\twriteError,\n\twriteResult,\n} from \"../fmt.js\";\nimport {\n\ttype ParsedDropOptions,\n\tparseDropOptions,\n\ttype RawDropOptions,\n} from \"../options.js\";\nimport type { ApiErrorDetails } from \"../output.js\";\nimport { createSpinner, shouldSpin } from \"../spinner.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { readJsonObjectFile } from \"./json_body.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: ApiErrorDetails;\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype DropData = { url: string; [key: string]: unknown };\n\ntype ManifestFile = {\n\tpath: string;\n\tcontentType: string;\n\tsizeBytes: number;\n};\n\ntype PreparedResult = {\n\tkind: \"staged\";\n\tmanifest: { files: ManifestFile[]; entry?: string | null };\n\toptions: Record<string, unknown>;\n\tmetadata?: Record<string, unknown>;\n};\n\ntype PublishClient = {\n\tpublish(\n\t\tinput: string,\n\t\toptions: ParsedDropOptions,\n\t): Promise<SdkResult<DropData>>;\n\tprepare?(input: string, options: ParsedDropOptions): Promise<PreparedResult>;\n\tdrops: {\n\t\tcreateRaw(\n\t\t\tbody: unknown,\n\t\t\toptions?: { idempotencyKey?: string },\n\t\t): Promise<SdkResult<DropData>>;\n\t};\n};\n\ntype PublishOptions = RawDropOptions & {\n\tdryRun?: boolean;\n\tfromJson?: string;\n\tjson?: boolean;\n\tquiet?: boolean;\n\turl?: boolean;\n\tapiKey?: string;\n};\n\ntype PublishDeps = {\n\tstore: CredentialStore;\n\tclient: PublishClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\treadJsonObject?: (path: string) => Promise<Record<string, unknown>>;\n\toutputMode?: \"human\" | \"json\";\n};\n\nconst MAX_BUNDLE_FILE_COUNT = 200;\n\nexport async function runPublish(\n\tinput: string | string[] | undefined,\n\traw: PublishOptions,\n\tdeps: PublishDeps,\n): Promise<{ exitCode: number }> {\n\tconst credential = await resolveCredential({\n\t\t...((raw.apiKey ?? deps.apiKey)\n\t\t\t? { apiKey: raw.apiKey ?? deps.apiKey }\n\t\t\t: {}),\n\t\tenv: deps.env,\n\t\tstore: deps.store,\n\t});\n\tif (!credential) {\n\t\treturn writeAuthError(deps);\n\t}\n\n\tif (raw.dryRun) {\n\t\treturn handlePublishDryRun(input, raw, deps);\n\t}\n\n\tconst singleInput = Array.isArray(input) ? input[0] : input;\n\tconst spin = shouldSpin(deps.outputMode)\n\t\t? createSpinner(\"Publishing…\", deps.stderr)\n\t\t: undefined;\n\ttry {\n\t\tif (raw.fromJson && singleInput) {\n\t\t\tthrow new Error(\"Use either <input> or --from-json, not both.\");\n\t\t}\n\t\tconst options = withPublishIdempotency(await parseDropOptions(raw));\n\t\tconst result = raw.fromJson\n\t\t\t? await deps.client.drops.createRaw(\n\t\t\t\t\tawait (deps.readJsonObject ?? readJsonObjectFile)(raw.fromJson),\n\t\t\t\t\toptions.idempotencyKey\n\t\t\t\t\t\t? { idempotencyKey: options.idempotencyKey }\n\t\t\t\t\t\t: {},\n\t\t\t\t)\n\t\t\t: singleInput\n\t\t\t\t? await deps.client.publish(singleInput, options)\n\t\t\t\t: (() => {\n\t\t\t\t\t\tthrow new Error(\"Publish requires <input> or --from-json.\");\n\t\t\t\t\t})();\n\t\tif (result.error) {\n\t\t\tspin?.fail();\n\t\t\treturn writeApiError(deps, result.error);\n\t\t}\n\t\tspin?.stop();\n\t\tif (raw.url) deps.stdout(`${result.data.url}\\n`);\n\t\telse writeResult(deps, result.data.url, \"Published\", result.data);\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"Publish failed.\";\n\t\tspin?.fail();\n\t\treturn writeError(deps, \"invalid_usage\", message);\n\t}\n}\n\nasync function handlePublishDryRun(\n\tinput: string | string[] | undefined,\n\traw: PublishOptions,\n\tdeps: PublishDeps,\n): Promise<{ exitCode: number }> {\n\tif (raw.url) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\t\"--url and --dry-run cannot be combined.\",\n\t\t\t\"Remove --url; dry-run outputs JSON describing what would be published.\",\n\t\t);\n\t}\n\ttry {\n\t\tif (raw.fromJson) {\n\t\t\tif (input)\n\t\t\t\tthrow new Error(\"Use either <input> or --from-json, not both.\");\n\t\t\tconst body = await (deps.readJsonObject ?? readJsonObjectFile)(\n\t\t\t\traw.fromJson,\n\t\t\t);\n\t\t\tdeps.stdout(\n\t\t\t\t`${JSON.stringify({ dryRun: true, kind: \"raw_json\", endpoint: \"POST /drops\", body }, null, 2)}\\n`,\n\t\t\t);\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\n\t\tif (!input || (Array.isArray(input) && input.length === 0)) {\n\t\t\tthrow new Error(\"Publish requires <input> or --from-json.\");\n\t\t}\n\n\t\tconst options = await parseDropOptions(raw);\n\n\t\tif (Array.isArray(input)) {\n\t\t\treturn dryRunMultiFile(input, options, deps);\n\t\t}\n\n\t\tif (!deps.client.prepare) {\n\t\t\tthrow new Error(\"Client does not support dry-run.\");\n\t\t}\n\t\tconst prepared = await deps.client.prepare(input, options);\n\t\tconst output = formatDryRunOutput(prepared);\n\t\tvalidateDryRunOutput(output);\n\t\tdeps.stdout(`${JSON.stringify(output, null, 2)}\\n`);\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\tconst code = isFileSystemError(error)\n\t\t\t? \"local_input_error\"\n\t\t\t: \"invalid_usage\";\n\t\tconst message = error instanceof Error ? error.message : \"Dry-run failed.\";\n\t\treturn writeError(deps, code, message);\n\t}\n}\n\nasync function dryRunMultiFile(\n\tinputs: string[],\n\toptions: ParsedDropOptions,\n\tdeps: PublishDeps,\n): Promise<{ exitCode: number }> {\n\tconst files: ManifestFile[] = [];\n\tfor (const filePath of inputs) {\n\t\tlet info: Awaited<ReturnType<typeof stat>>;\n\t\ttry {\n\t\t\tinfo = await stat(filePath);\n\t\t} catch {\n\t\t\treturn writeError(\n\t\t\t\tdeps,\n\t\t\t\t\"local_input_error\",\n\t\t\t\t`File not found: ${filePath}`,\n\t\t\t);\n\t\t}\n\t\tif (info.isDirectory()) {\n\t\t\treturn writeError(\n\t\t\t\tdeps,\n\t\t\t\t\"local_input_error\",\n\t\t\t\t`Cannot mix directories with multiple file arguments. Use a single folder instead: dropthis publish ${filePath}`,\n\t\t\t);\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: basename(filePath),\n\t\t\tcontentType: mimeForPath(filePath),\n\t\t\tsizeBytes: info.size,\n\t\t});\n\t}\n\n\tif (files.length > MAX_BUNDLE_FILE_COUNT) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"local_input_error\",\n\t\t\t`Bundle contains ${files.length} files, exceeding the maximum of ${MAX_BUNDLE_FILE_COUNT}.`,\n\t\t);\n\t}\n\n\tconst entry =\n\t\toptions.entry ??\n\t\tfiles.find((f) => f.path === \"index.html\")?.path ??\n\t\tfiles[0]?.path ??\n\t\tnull;\n\tconst totalBytes = files.reduce((sum, f) => sum + f.sizeBytes, 0);\n\tconst output = {\n\t\tdryRun: true as const,\n\t\tkind: \"staged\" as const,\n\t\tmanifest: { files, entry },\n\t\toptions: dryRunOptionsBody(options),\n\t\ttotalBytes,\n\t};\n\n\tdeps.stdout(`${JSON.stringify(output, null, 2)}\\n`);\n\treturn { exitCode: 0 };\n}\n\nfunction formatDryRunOutput(prepared: PreparedResult): Record<string, unknown> {\n\tconst totalBytes = prepared.manifest.files.reduce(\n\t\t(sum, f) => sum + f.sizeBytes,\n\t\t0,\n\t);\n\treturn {\n\t\tdryRun: true,\n\t\tkind: \"staged\",\n\t\tmanifest: {\n\t\t\tfiles: prepared.manifest.files,\n\t\t\tentry: prepared.manifest.entry ?? null,\n\t\t},\n\t\toptions: prepared.options,\n\t\t...(prepared.metadata ? { metadata: prepared.metadata } : {}),\n\t\ttotalBytes,\n\t};\n}\n\nfunction validateDryRunOutput(output: Record<string, unknown>): void {\n\tif (output.kind !== \"staged\") return;\n\tconst manifest = output.manifest as {\n\t\tfiles: ManifestFile[];\n\t};\n\tif (manifest.files.length > MAX_BUNDLE_FILE_COUNT) {\n\t\tthrow Object.assign(\n\t\t\tnew Error(\n\t\t\t\t`Bundle contains ${manifest.files.length} files, exceeding the maximum of ${MAX_BUNDLE_FILE_COUNT}.`,\n\t\t\t),\n\t\t\t{ code: \"ELIMIT\" },\n\t\t);\n\t}\n}\n\nfunction dryRunOptionsBody(\n\toptions: ParsedDropOptions,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\tif (options.title) result.title = options.title;\n\tif (options.visibility) result.visibility = options.visibility;\n\tif (options.password !== undefined) result.password = options.password;\n\tif (options.noindex !== undefined) result.noindex = options.noindex;\n\tif (options.expiresAt) result.expires_at = options.expiresAt;\n\treturn result;\n}\n\nfunction mimeForPath(filePath: string): string {\n\tconst ext = extname(filePath).toLowerCase();\n\tconst types: Record<string, string> = {\n\t\t\".html\": \"text/html\",\n\t\t\".htm\": \"text/html\",\n\t\t\".css\": \"text/css\",\n\t\t\".js\": \"text/javascript\",\n\t\t\".mjs\": \"text/javascript\",\n\t\t\".json\": \"application/json\",\n\t\t\".xml\": \"application/xml\",\n\t\t\".svg\": \"image/svg+xml\",\n\t\t\".txt\": \"text/plain\",\n\t\t\".md\": \"text/markdown\",\n\t\t\".jpg\": \"image/jpeg\",\n\t\t\".jpeg\": \"image/jpeg\",\n\t\t\".png\": \"image/png\",\n\t\t\".gif\": \"image/gif\",\n\t\t\".webp\": \"image/webp\",\n\t\t\".ico\": \"image/x-icon\",\n\t\t\".avif\": \"image/avif\",\n\t\t\".pdf\": \"application/pdf\",\n\t\t\".zip\": \"application/zip\",\n\t\t\".woff\": \"font/woff\",\n\t\t\".woff2\": \"font/woff2\",\n\t\t\".ttf\": \"font/ttf\",\n\t\t\".mp4\": \"video/mp4\",\n\t\t\".webm\": \"video/webm\",\n\t};\n\treturn types[ext] ?? \"application/octet-stream\";\n}\n\nfunction isFileSystemError(error: unknown): boolean {\n\tif (!(error instanceof Error)) return false;\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code === \"ENOENT\" || code === \"ENOTDIR\" || code === \"ELIMIT\";\n}\n\nfunction withPublishIdempotency(options: ParsedDropOptions): ParsedDropOptions {\n\treturn options.idempotencyKey\n\t\t? options\n\t\t: { ...options, idempotencyKey: `cli_pub_${randomUUID()}` };\n}\n","import pc from \"picocolors\";\nimport { symbols } from \"./ui.js\";\n\nconst frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\nexport type Spinner = {\n\tstop(): void;\n\tfail(): void;\n};\n\nexport function createSpinner(\n\tmessage: string,\n\tstderr: (value: string) => void,\n): Spinner {\n\tlet i = 0;\n\tconst timer = setInterval(() => {\n\t\tstderr(`\\r\\x1B[2K${pc.cyan(frames[i % frames.length])} ${message}`);\n\t\ti++;\n\t}, 80);\n\n\treturn {\n\t\tstop() {\n\t\t\tclearInterval(timer);\n\t\t\tstderr(\"\\r\\x1B[2K\");\n\t\t},\n\t\tfail() {\n\t\t\tclearInterval(timer);\n\t\t\tstderr(\"\\r\\x1B[2K\");\n\t\t},\n\t};\n}\n\nexport function shouldSpin(outputMode?: \"human\" | \"json\"): boolean {\n\treturn (\n\t\toutputMode === \"human\" && process.stderr.isTTY === true && !process.env.CI\n\t);\n}\n","import { readFile } from \"node:fs/promises\";\n\nexport async function readJsonObjectFile(\n\tpath: string,\n): Promise<Record<string, unknown>> {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(await readFile(path, \"utf8\"));\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error ? error.message : \"Unknown parse error\";\n\t\tthrow new Error(`Invalid JSON body in ${path}: ${message}`);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(\"JSON body must be an object.\");\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n","import { randomUUID } from \"node:crypto\";\nimport { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiError,\n\twriteAuthError,\n\twriteError,\n\twriteResult,\n} from \"../fmt.js\";\nimport {\n\ttype ParsedDropOptions,\n\tparseDropOptions,\n\ttype RawDropOptions,\n} from \"../options.js\";\nimport type { ApiErrorDetails } from \"../output.js\";\nimport { createSpinner, shouldSpin } from \"../spinner.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { readJsonObjectFile } from \"./json_body.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| { data: null; error: ApiErrorDetails; headers?: Record<string, string> };\n\ntype DropData = { url: string; [key: string]: unknown };\ntype UpdateOptions = ParsedDropOptions & { ifRevision?: number };\n\ntype ManifestFile = {\n\tpath: string;\n\tcontentType: string;\n\tsizeBytes: number;\n};\n\ntype PreparedResult = {\n\tkind: \"staged\";\n\tmanifest: { files: ManifestFile[]; entry?: string | null };\n\toptions: Record<string, unknown>;\n\tmetadata?: Record<string, unknown>;\n};\n\ntype UpdateClient = {\n\tupdate(\n\t\ttarget: string,\n\t\tinputOrOptions: string | UpdateOptions,\n\t\toptions?: UpdateOptions,\n\t): Promise<SdkResult<DropData>>;\n\tprepare?(input: string, options: ParsedDropOptions): Promise<PreparedResult>;\n\tdeployments: {\n\t\tcreateRaw(\n\t\t\tdropId: string,\n\t\t\tbody: unknown,\n\t\t\toptions?: { idempotencyKey?: string; ifRevision?: number },\n\t\t): Promise<SdkResult<DropData>>;\n\t};\n};\n\ntype RawUpdateOptions = RawDropOptions & {\n\tdryRun?: boolean;\n\tifRevision?: number;\n\tfromJson?: string;\n\tjson?: boolean;\n\tquiet?: boolean;\n\turl?: boolean;\n\tapiKey?: string;\n};\n\ntype UpdateDeps = {\n\tstore: CredentialStore;\n\tclient: UpdateClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\treadJsonObject?: (path: string) => Promise<Record<string, unknown>>;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runUpdate(\n\ttarget: string,\n\tinput: string | undefined,\n\traw: RawUpdateOptions,\n\tdeps: UpdateDeps,\n): Promise<{ exitCode: number }> {\n\tconst credential = await resolveCredential({\n\t\t...((raw.apiKey ?? deps.apiKey)\n\t\t\t? { apiKey: raw.apiKey ?? deps.apiKey }\n\t\t\t: {}),\n\t\tenv: deps.env,\n\t\tstore: deps.store,\n\t});\n\tif (!credential) {\n\t\treturn writeAuthError(deps);\n\t}\n\n\tif (raw.dryRun) {\n\t\treturn handleUpdateDryRun(target, input, raw, deps);\n\t}\n\n\tconst spin = shouldSpin(deps.outputMode)\n\t\t? createSpinner(\"Updating…\", deps.stderr)\n\t\t: undefined;\n\ttry {\n\t\tassertDropId(target);\n\t\tif (raw.fromJson && input) {\n\t\t\tthrow new Error(\"Use either [input] or --from-json, not both.\");\n\t\t}\n\t\tconst parsed = await parseDropOptions(raw);\n\t\tconst revisionOptions =\n\t\t\traw.ifRevision !== undefined\n\t\t\t\t? { ifRevision: Number(raw.ifRevision) }\n\t\t\t\t: {};\n\t\tconst result = raw.fromJson\n\t\t\t? await deps.client.deployments.createRaw(\n\t\t\t\t\ttarget,\n\t\t\t\t\tawait (deps.readJsonObject ?? readJsonObjectFile)(raw.fromJson),\n\t\t\t\t\twithUpdateIdempotency({\n\t\t\t\t\t\t...revisionOptions,\n\t\t\t\t\t\t...(parsed.idempotencyKey\n\t\t\t\t\t\t\t? { idempotencyKey: parsed.idempotencyKey }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: input\n\t\t\t\t? await deps.client.update(\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\twithUpdateIdempotency({\n\t\t\t\t\t\t\t...parsed,\n\t\t\t\t\t\t\t...revisionOptions,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t: await deps.client.update(target, parsed, revisionOptions);\n\t\tif (result.error) {\n\t\t\tspin?.fail();\n\t\t\treturn writeApiError(deps, result.error);\n\t\t}\n\t\tspin?.stop();\n\t\tif (raw.url) deps.stdout(`${result.data.url}\\n`);\n\t\telse writeResult(deps, result.data.url, \"Updated\", result.data);\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"Update failed.\";\n\t\tspin?.fail();\n\t\treturn writeError(deps, \"invalid_usage\", message);\n\t}\n}\n\nasync function handleUpdateDryRun(\n\ttarget: string,\n\tinput: string | undefined,\n\traw: RawUpdateOptions,\n\tdeps: UpdateDeps,\n): Promise<{ exitCode: number }> {\n\tif (raw.url) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\t\"--url and --dry-run cannot be combined.\",\n\t\t\t\"Remove --url; dry-run outputs JSON describing what would be published.\",\n\t\t);\n\t}\n\ttry {\n\t\tassertDropId(target);\n\n\t\tif (raw.fromJson) {\n\t\t\tif (input)\n\t\t\t\tthrow new Error(\"Use either [input] or --from-json, not both.\");\n\t\t\tconst body = await (deps.readJsonObject ?? readJsonObjectFile)(\n\t\t\t\traw.fromJson,\n\t\t\t);\n\t\t\tdeps.stdout(\n\t\t\t\t`${JSON.stringify({ dryRun: true, kind: \"raw_json\", endpoint: `POST /drops/${target}/deployments`, body }, null, 2)}\\n`,\n\t\t\t);\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\n\t\tconst options = await parseDropOptions(raw);\n\n\t\tif (!input) {\n\t\t\tconst fields: Record<string, unknown> = {};\n\t\t\tif (options.slug) fields.slug = options.slug;\n\t\t\tif (options.title) fields.title = options.title;\n\t\t\tif (options.visibility) fields.visibility = options.visibility;\n\t\t\tif (options.password !== undefined) fields.password = options.password;\n\t\t\tif (options.noindex !== undefined) fields.noindex = options.noindex;\n\t\t\tif (options.expiresAt) fields.expires_at = options.expiresAt;\n\t\t\tif (options.metadata) fields.metadata = options.metadata;\n\t\t\tdeps.stdout(\n\t\t\t\t`${JSON.stringify({ dryRun: true, kind: \"options_update\", target, fields }, null, 2)}\\n`,\n\t\t\t);\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\n\t\tif (!deps.client.prepare) {\n\t\t\tthrow new Error(\"Client does not support dry-run.\");\n\t\t}\n\t\tconst prepared = await deps.client.prepare(input, options);\n\t\tconst output = formatUpdateDryRun(target, prepared);\n\t\tvalidateDryRunFileCount(output);\n\t\tdeps.stdout(`${JSON.stringify(output, null, 2)}\\n`);\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\tconst code = isFileSystemError(error)\n\t\t\t? \"local_input_error\"\n\t\t\t: \"invalid_usage\";\n\t\tconst message = error instanceof Error ? error.message : \"Dry-run failed.\";\n\t\treturn writeError(deps, code, message);\n\t}\n}\n\nconst MAX_BUNDLE_FILE_COUNT = 200;\n\nfunction formatUpdateDryRun(\n\ttarget: string,\n\tprepared: PreparedResult,\n): Record<string, unknown> {\n\tconst totalBytes = prepared.manifest.files.reduce(\n\t\t(sum, f) => sum + f.sizeBytes,\n\t\t0,\n\t);\n\treturn {\n\t\tdryRun: true,\n\t\tkind: \"staged\",\n\t\ttarget,\n\t\tmanifest: {\n\t\t\tfiles: prepared.manifest.files,\n\t\t\tentry: prepared.manifest.entry ?? null,\n\t\t},\n\t\toptions: prepared.options,\n\t\t...(prepared.metadata ? { metadata: prepared.metadata } : {}),\n\t\ttotalBytes,\n\t};\n}\n\nfunction validateDryRunFileCount(output: Record<string, unknown>): void {\n\tif (output.kind !== \"staged\") return;\n\tconst manifest = output.manifest as { files: ManifestFile[] };\n\tif (manifest.files.length > MAX_BUNDLE_FILE_COUNT) {\n\t\tthrow Object.assign(\n\t\t\tnew Error(\n\t\t\t\t`Bundle contains ${manifest.files.length} files, exceeding the maximum of ${MAX_BUNDLE_FILE_COUNT}.`,\n\t\t\t),\n\t\t\t{ code: \"ELIMIT\" },\n\t\t);\n\t}\n}\n\nfunction isFileSystemError(error: unknown): boolean {\n\tif (!(error instanceof Error)) return false;\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction withUpdateIdempotency(options: UpdateOptions): UpdateOptions {\n\treturn options.idempotencyKey\n\t\t? options\n\t\t: { ...options, idempotencyKey: `cli_upd_${randomUUID()}` };\n}\n\nfunction assertDropId(target: string): void {\n\tif (!target.startsWith(\"drop_\")) {\n\t\tthrow new Error(\n\t\t\t\"Update target must be a drop id returned by --json output, for example drop_...\",\n\t\t);\n\t}\n}\n","import { maskKey, resolveCredential } from \"../auth.js\";\nimport { writeHumanOrJson, writeKv } from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\nexport async function runWhoami(\n\t_input: { json?: boolean },\n\tdeps: {\n\t\tstore: CredentialStore;\n\t\tenv: Record<string, string | undefined>;\n\t\tstdout: (value: string) => void;\n\t\tstderr: (value: string) => void;\n\t\toutputMode?: \"human\" | \"json\";\n\t},\n): Promise<{ exitCode: number }> {\n\tconst credential = await resolveCredential({\n\t\tenv: deps.env,\n\t\tstore: deps.store,\n\t});\n\tif (!credential) {\n\t\twriteHumanOrJson(deps, \"Not authenticated. Run dropthis login.\", {\n\t\t\tok: true,\n\t\t\tauthenticated: false,\n\t\t});\n\t\treturn { exitCode: 0 };\n\t}\n\tconst masked = maskKey(credential.apiKey);\n\tconst pairs: Array<[string, string]> = [];\n\tif (credential.email) pairs.push([\"Email\", credential.email]);\n\tpairs.push([\"Key\", masked]);\n\tpairs.push([\"Source\", credential.source]);\n\tif (credential.accountId) pairs.push([\"Account\", credential.accountId]);\n\n\tconst jsonEnvelope = {\n\t\tok: true,\n\t\tauthenticated: true,\n\t\tsource: credential.source,\n\t\tmasked_key: masked,\n\t\t...(credential.keyId ? { key_id: credential.keyId } : {}),\n\t\t...(credential.keyLast4 ? { key_last4: credential.keyLast4 } : {}),\n\t\t...(credential.accountId ? { account_id: credential.accountId } : {}),\n\t\t...(credential.email ? { email: credential.email } : {}),\n\t};\n\twriteKv(deps, pairs, jsonEnvelope);\n\treturn { exitCode: 0 };\n}\n","import { Dropthis } from \"@dropthis/node\";\nimport { createOutput, type Output } from \"./output.js\";\n\nexport type GlobalOptions = {\n\tapiKey?: string;\n\tapiUrl?: string;\n\tjson?: boolean;\n\tquiet?: boolean;\n};\n\nexport type CliContext = {\n\tenv: Record<string, string | undefined>;\n\tglobal: GlobalOptions;\n\toutput: Output;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\tcreateClient: (apiKey?: string) => Dropthis;\n};\n\nexport function createContext(input: {\n\tglobal?: GlobalOptions;\n\tenv?: Record<string, string | undefined>;\n\tstdout?: (value: string) => void;\n\tstderr?: (value: string) => void;\n\tstdoutIsTTY?: boolean;\n}): CliContext {\n\tconst env = input.env ?? process.env;\n\tconst global = input.global ?? {};\n\treturn {\n\t\tenv,\n\t\tglobal,\n\t\toutput: createOutput({\n\t\t\t...(global.json !== undefined ? { json: global.json } : {}),\n\t\t\t...(global.quiet !== undefined ? { quiet: global.quiet } : {}),\n\t\t\tstdoutIsTTY: input.stdoutIsTTY ?? process.stdout.isTTY === true,\n\t\t\tenv,\n\t\t}),\n\t\tstdout: input.stdout ?? ((value) => process.stdout.write(value)),\n\t\tstderr: input.stderr ?? ((value) => process.stderr.write(value)),\n\t\tcreateClient(apiKey) {\n\t\t\tconst baseUrl = global.apiUrl ?? env.DROPTHIS_API_URL;\n\t\t\treturn new Dropthis({\n\t\t\t\t...(apiKey ? { apiKey } : {}),\n\t\t\t\t...(baseUrl ? { baseUrl } : {}),\n\t\t\t});\n\t\t},\n\t};\n}\n","import { chmod, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { Entry } from \"@napi-rs/keyring\";\n\nexport type StoredCredential = {\n\tapiKey: string;\n\tkeyId?: string;\n\tkeyLast4?: string;\n\taccountId?: string;\n\temail?: string;\n\tstorage: \"secure\" | \"insecure\";\n};\n\nexport interface CredentialStore {\n\tread(): Promise<StoredCredential | null>;\n\tsave(credential: StoredCredential): Promise<void>;\n\tclear(): Promise<void>;\n}\n\nexport type KeyringAdapter = {\n\tgetPassword(): string | null | undefined | Promise<string | null | undefined>;\n\tsetPassword(value: string): void | Promise<void>;\n\tdeletePassword(): void | Promise<void>;\n};\n\nexport class MemoryCredentialStore implements CredentialStore {\n\tprivate credential: StoredCredential | null = null;\n\n\tasync read(): Promise<StoredCredential | null> {\n\t\treturn this.credential;\n\t}\n\n\tasync save(credential: StoredCredential): Promise<void> {\n\t\tthis.credential = credential;\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tthis.credential = null;\n\t}\n}\n\nexport class InsecureFileCredentialStore implements CredentialStore {\n\tprivate readonly filePath: string;\n\n\tconstructor(options: { configDir?: string } = {}) {\n\t\tthis.filePath = credentialPath(options.configDir);\n\t}\n\n\tasync read(): Promise<StoredCredential | null> {\n\t\tconst value = await readJsonFile(this.filePath);\n\t\tif (!value) return null;\n\t\tif (typeof value.apiKey !== \"string\" || !value.apiKey) return null;\n\t\treturn { ...value, storage: \"insecure\" } as StoredCredential;\n\t}\n\n\tasync save(credential: StoredCredential): Promise<void> {\n\t\tawait writeCredentialFile(this.filePath, {\n\t\t\t...credential,\n\t\t\tstorage: \"insecure\",\n\t\t});\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tawait rm(this.filePath, { force: true });\n\t}\n}\n\nexport class KeyringCredentialStore implements CredentialStore {\n\tprivate readonly filePath: string;\n\tprivate readonly keyring: KeyringAdapter;\n\n\tconstructor(options: { configDir?: string; keyring?: KeyringAdapter } = {}) {\n\t\tthis.filePath = credentialPath(options.configDir);\n\t\tthis.keyring = options.keyring ?? defaultKeyringAdapter();\n\t}\n\n\tasync read(): Promise<StoredCredential | null> {\n\t\tconst metadata = await readJsonFile(this.filePath);\n\t\tif (!metadata) return null;\n\t\tconst apiKey = await this.keyring.getPassword();\n\t\tif (typeof apiKey !== \"string\" || !apiKey) return null;\n\t\treturn { ...metadata, apiKey, storage: \"secure\" } as StoredCredential;\n\t}\n\n\tasync save(credential: StoredCredential): Promise<void> {\n\t\tawait this.keyring.setPassword(credential.apiKey);\n\t\tconst { apiKey: _apiKey, ...metadata } = credential;\n\t\tawait writeCredentialFile(this.filePath, {\n\t\t\t...metadata,\n\t\t\tstorage: \"secure\",\n\t\t});\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tawait this.keyring.deletePassword();\n\t\tawait rm(this.filePath, { force: true });\n\t}\n}\n\nexport function createCredentialStore(\n\toptions: { insecure?: boolean; configDir?: string } = {},\n): CredentialStore {\n\tif (options.insecure) return new InsecureFileCredentialStore(options);\n\treturn new KeyringCredentialStore(options);\n}\n\nfunction defaultKeyringAdapter(): KeyringAdapter {\n\tconst entry = new Entry(\"dropthis\", \"default\");\n\treturn {\n\t\tgetPassword: () => entry.getPassword(),\n\t\tsetPassword: (value) => entry.setPassword(value),\n\t\tdeletePassword: () => {\n\t\t\tentry.deletePassword();\n\t\t},\n\t};\n}\n\nfunction credentialPath(configDir?: string): string {\n\treturn join(\n\t\tconfigDir ?? join(homedir(), \".config\", \"dropthis\"),\n\t\t\"credentials.json\",\n\t);\n}\n\nasync function readJsonFile(\n\tpath: string,\n): Promise<Record<string, unknown> | null> {\n\ttry {\n\t\treturn JSON.parse(await readFile(path, \"utf8\")) as Record<string, unknown>;\n\t} catch (error) {\n\t\tif (\n\t\t\terror &&\n\t\t\ttypeof error === \"object\" &&\n\t\t\t\"code\" in error &&\n\t\t\terror.code === \"ENOENT\"\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nasync function writeCredentialFile(\n\tpath: string,\n\tcredential: Record<string, unknown>,\n): Promise<void> {\n\tawait mkdir(dirname(path), { recursive: true });\n\tawait writeFile(path, `${JSON.stringify(credential, null, 2)}\\n`, {\n\t\tmode: 0o600,\n\t});\n\tawait chmod(path, 0o600);\n}\n","#!/usr/bin/env node\nimport { buildProgram } from \"./program.js\";\nimport { createCredentialStore } from \"./storage.js\";\n\nbuildProgram({ store: createCredentialStore() })\n\t.parseAsync(process.argv)\n\t.catch((error: unknown) => {\n\t\tconsole.error(error);\n\t\tprocess.exitCode = 1;\n\t});\n"],"mappings":"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","names":["import_picocolors","error","pc","pc","pc","hasCredential","prompts","hasCredential","listItems","error","prompts","import_promises","import_picocolors","pc","import_promises","error","error","import_node_crypto","error","isFileSystemError","MAX_BUNDLE_FILE_COUNT","import_promises","import_node_path","error","pc","deps","global","result","writeFile","join","error"]}
|
|
1
|
+
{"version":3,"sources":["../src/program.ts","../src/auth.ts","../src/output.ts","../src/ui.ts","../src/fmt.ts","../src/commands/account.ts","../src/commands/api-keys.ts","../src/commands/commands.ts","../src/commands/deployments.ts","../src/commands/doctor.ts","../src/commands/drops.ts","../src/options.ts","../src/commands/login.ts","../src/commands/logout.ts","../src/commands/publish.ts","../src/spinner.ts","../src/commands/json_body.ts","../src/commands/update.ts","../src/commands/whoami.ts","../src/context.ts","../src/storage.ts","../src/cli.ts"],"sourcesContent":["import { Command, InvalidArgumentError } from \"commander\";\nimport pc from \"picocolors\";\nimport { resolveCredential } from \"./auth.js\";\nimport { runAccountGet } from \"./commands/account.js\";\nimport {\n\trunApiKeysCreate,\n\trunApiKeysDelete,\n\trunApiKeysList,\n} from \"./commands/api-keys.js\";\nimport { runCommands } from \"./commands/commands.js\";\nimport {\n\trunDeploymentsGet,\n\trunDeploymentsList,\n} from \"./commands/deployments.js\";\nimport { runDoctor } from \"./commands/doctor.js\";\nimport {\n\trunDropsDelete,\n\trunDropsGet,\n\trunDropsList,\n\trunDropsUpdate,\n} from \"./commands/drops.js\";\nimport {\n\trunLoginInteractive,\n\trunLoginRequest,\n\trunLoginVerify,\n} from \"./commands/login.js\";\nimport { runLogout } from \"./commands/logout.js\";\nimport { runPublish } from \"./commands/publish.js\";\nimport { runUpdate } from \"./commands/update.js\";\nimport { runWhoami } from \"./commands/whoami.js\";\nimport { createContext, type GlobalOptions } from \"./context.js\";\nimport { writeError } from \"./fmt.js\";\nimport type { RawDropOptions } from \"./options.js\";\nimport { type CredentialStore, MemoryCredentialStore } from \"./storage.js\";\n\ntype BuildProgramOptions = {\n\tstore?: CredentialStore;\n\tclient?: unknown;\n\tenv?: Record<string, string | undefined>;\n\tstdin?: AsyncIterable<string | Uint8Array>;\n\tstdout?: (value: string) => void;\n\tstderr?: (value: string) => void;\n\tstdoutIsTTY?: boolean;\n\tstdinIsTTY?: boolean;\n};\n\nexport function buildProgram(options: BuildProgramOptions = {}): Command {\n\tconst program = new Command();\n\tconst store = options.store ?? new MemoryCredentialStore();\n\tprogram\n\t\t.name(\"dropthis\")\n\t\t.description(\n\t\t\t[\n\t\t\t\tpc.dim(\"Publish anything online and get a URL back.\"),\n\t\t\t\t\"\",\n\t\t\t\t`${pc.bold(\"Quick start:\")}`,\n\t\t\t\t` ${pc.cyan(\"dropthis login\")}`,\n\t\t\t\t` ${pc.cyan(\"dropthis publish ./dist\")}`,\n\t\t\t].join(\"\\n\"),\n\t\t)\n\t\t.version(PKG_VERSION)\n\t\t.configureHelp({\n\t\t\tsubcommandTerm(cmd) {\n\t\t\t\tconst args = cmd.registeredArguments\n\t\t\t\t\t.map((a) => {\n\t\t\t\t\t\tconst name = a.name();\n\t\t\t\t\t\tconst variadic = a.variadic ? \"...\" : \"\";\n\t\t\t\t\t\treturn a.required ? `<${name}${variadic}>` : `[${name}${variadic}]`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\" \");\n\t\t\t\treturn args ? `${cmd.name()} ${args}` : cmd.name();\n\t\t\t},\n\t\t\tstyleTitle: (title) => pc.bold(title),\n\t\t\tstyleCommandText: (str) => pc.cyan(str),\n\t\t\tstyleSubcommandText: (str) => pc.cyan(str),\n\t\t\tstyleOptionText: (str) => pc.yellow(str),\n\t\t});\n\tprogram.option(\"--api-key <key>\", \"Override API key for this invocation\");\n\tprogram.option(\"--api-url <url>\", \"Override API base URL\");\n\tprogram.option(\"--json\", \"Force JSON output\");\n\tprogram.option(\"-q, --quiet\", \"Suppress status output and imply JSON\");\n\n\tprogram\n\t\t.command(\"publish [input...]\")\n\t\t.description(\n\t\t\t\"Publish files, folders, URLs, strings, or stdin.\\nMultiple files are bundled into one drop.\\nUse - to read stdin explicitly, or pipe without args.\",\n\t\t)\n\t\t.option(\"--from-json <path>\", \"Read exact POST /drops JSON request body\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.option(\"--title <title>\", \"Drop title\")\n\t\t.option(\"--visibility <visibility>\", \"Drop visibility\")\n\t\t.option(\"--password <password>\", \"Set password\")\n\t\t.option(\"--no-password\", \"Clear password\")\n\t\t.option(\"--noindex\", \"Prevent indexing\")\n\t\t.option(\"--index\", \"Allow indexing\")\n\t\t.option(\"--expires-at <datetime>\", \"Expiration datetime\")\n\t\t.option(\"--metadata <json>\", \"Metadata JSON object\")\n\t\t.option(\"--metadata-file <path>\", \"Metadata JSON file\")\n\t\t.option(\"--entry <path>\", \"Entry file path\")\n\t\t.option(\"--content-type <mime>\", \"Content type\")\n\t\t.option(\"--path <path>\", \"Path for stdin or byte input\")\n\t\t.option(\"--idempotency-key <key>\", \"Idempotency key\")\n\t\t.option(\"--url\", \"Print only the published URL\")\n\t\t.option(\"--dry-run\", \"Validate without publishing\")\n\t\t.action(async (inputs: string[], commandOptions: RawCommandOptions) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runPublish>[2][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst stdinIsTTY = options.stdinIsTTY ?? process.stdin.isTTY ?? false;\n\t\t\tlet publishInput: string | string[] | undefined;\n\t\t\ttry {\n\t\t\t\tif (commandOptions.dryRun && inputs.length > 1) {\n\t\t\t\t\tpublishInput = inputs;\n\t\t\t\t} else {\n\t\t\t\t\tpublishInput = await resolvePublishInputs(\n\t\t\t\t\t\tinputs,\n\t\t\t\t\t\toptions.stdin,\n\t\t\t\t\t\tstdinIsTTY,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst msg = err instanceof Error ? err.message : \"Invalid input.\";\n\t\t\t\tprocess.exitCode = writeError(deps, \"local_input_error\", msg).exitCode;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst result = await runPublish(\n\t\t\t\tpublishInput,\n\t\t\t\ttoDropOptions(commandOptions),\n\t\t\t\tdeps,\n\t\t\t);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\tprogram\n\t\t.command(\"update <target> [input]\")\n\t\t.description(\"Deploy new content to an existing drop\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.option(\"--slug <slug>\", \"Replace shared hosted drop slug\")\n\t\t.option(\"--title <title>\", \"Drop title\")\n\t\t.option(\"--visibility <visibility>\", \"Drop visibility\")\n\t\t.option(\"--password <password>\", \"Set password\")\n\t\t.option(\"--no-password\", \"Clear password\")\n\t\t.option(\"--noindex\", \"Prevent indexing\")\n\t\t.option(\"--index\", \"Allow indexing\")\n\t\t.option(\"--expires-at <datetime>\", \"Expiration datetime\")\n\t\t.option(\"--metadata <json>\", \"Metadata JSON object\")\n\t\t.option(\"--metadata-file <path>\", \"Metadata JSON file\")\n\t\t.option(\"--entry <path>\", \"Entry file path\")\n\t\t.option(\"--content-type <mime>\", \"Content type\")\n\t\t.option(\"--path <path>\", \"Path for stdin or byte input\")\n\t\t.option(\"--idempotency-key <key>\", \"Idempotency key\")\n\t\t.option(\"--if-revision <n>\", \"Expected current revision\", parseInteger)\n\t\t.option(\n\t\t\t\"--from-json <path>\",\n\t\t\t\"Read exact POST /drops/{drop_id}/deployments JSON request body\",\n\t\t)\n\t\t.option(\"--url\", \"Print only the published URL\")\n\t\t.option(\"--dry-run\", \"Validate without publishing\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\ttarget: string,\n\t\t\t\tinput: string | undefined,\n\t\t\t\tcommandOptions: RawCommandOptions & { ifRevision?: number },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runUpdate>[3][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tlet updateInput: string | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tupdateInput = input\n\t\t\t\t\t\t? await resolveCommandInput(input, options.stdin)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst msg = err instanceof Error ? err.message : \"Invalid input.\";\n\t\t\t\t\tprocess.exitCode = writeError(\n\t\t\t\t\t\tdeps,\n\t\t\t\t\t\t\"local_input_error\",\n\t\t\t\t\t\tmsg,\n\t\t\t\t\t).exitCode;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst result = await runUpdate(\n\t\t\t\t\ttarget,\n\t\t\t\t\tupdateInput,\n\t\t\t\t\ttoDropOptions(commandOptions),\n\t\t\t\t\tdeps,\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tconst drops = program.command(\"drops\").description(\"Manage published drops\");\n\tdrops\n\t\t.command(\"list\")\n\t\t.description(\"List your drops\")\n\t\t.option(\"--limit <n>\", \"Page size\", parseInteger)\n\t\t.option(\"--cursor <cursor>\", \"Pagination cursor\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (commandOptions: {\n\t\t\t\tlimit?: number;\n\t\t\t\tcursor?: string;\n\t\t\t\tjson?: boolean;\n\t\t\t}) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runDropsList>[1][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runDropsList(commandOptions, deps);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\tdrops\n\t\t.command(\"get <dropId>\")\n\t\t.description(\"Show drop details\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (dropId: string, commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runDropsGet>[2][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runDropsGet(dropId, commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tdrops\n\t\t.command(\"update <dropId>\")\n\t\t.description(\"Update drop metadata\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.option(\"--title <title>\", \"Drop title\")\n\t\t.option(\"--visibility <visibility>\", \"Drop visibility\")\n\t\t.option(\"--password <password>\", \"Set password\")\n\t\t.option(\"--no-password\", \"Clear password\")\n\t\t.option(\"--noindex\", \"Prevent indexing\")\n\t\t.option(\"--index\", \"Allow indexing\")\n\t\t.option(\"--expires-at <datetime>\", \"Expiration datetime\")\n\t\t.option(\"--metadata <json>\", \"Metadata JSON object\")\n\t\t.option(\"--metadata-file <path>\", \"Metadata JSON file\")\n\t\t.action(async (dropId: string, commandOptions: RawCommandOptions) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runDropsUpdate>[2][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runDropsUpdate(\n\t\t\t\tdropId,\n\t\t\t\ttoDropOptions(commandOptions),\n\t\t\t\tdeps,\n\t\t\t);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tdrops\n\t\t.command(\"delete <dropId>\")\n\t\t.description(\"Delete a drop\")\n\t\t.option(\"--yes\", \"Confirm deletion\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\tdropId: string,\n\t\t\t\tcommandOptions: { yes?: boolean; json?: boolean },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runDropsDelete>[2][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runDropsDelete(\n\t\t\t\t\tdropId,\n\t\t\t\t\t{ ...commandOptions, interactive: deps.outputMode === \"human\" },\n\t\t\t\t\tdeps,\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tconst apiKeys = program.command(\"api-keys\").description(\"Manage API keys\");\n\tapiKeys\n\t\t.command(\"create\")\n\t\t.description(\"Create an API key\")\n\t\t.option(\"--label <label>\", \"API key label\", \"CLI\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { label: string; json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runApiKeysCreate>[1][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runApiKeysCreate(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tapiKeys\n\t\t.command(\"list\")\n\t\t.description(\"List API keys\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runApiKeysList>[1][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runApiKeysList(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tapiKeys\n\t\t.command(\"delete <keyId>\")\n\t\t.description(\"Delete an API key\")\n\t\t.option(\"--yes\", \"Confirm deletion\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\tkeyId: string,\n\t\t\t\tcommandOptions: { yes?: boolean; json?: boolean },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runApiKeysDelete>[2][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runApiKeysDelete(\n\t\t\t\t\tkeyId,\n\t\t\t\t\t{ ...commandOptions, interactive: deps.outputMode === \"human\" },\n\t\t\t\t\tdeps,\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tconst deployments = program\n\t\t.command(\"deployments\")\n\t\t.description(\"View deployment history\");\n\tdeployments\n\t\t.command(\"list <dropId>\")\n\t\t.description(\"List deployments for a drop\")\n\t\t.option(\"--limit <n>\", \"Page size\", parseInteger)\n\t\t.option(\"--cursor <cursor>\", \"Pagination cursor\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\tdropId: string,\n\t\t\t\tcommandOptions: { limit?: number; cursor?: string; json?: boolean },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runDeploymentsList>[2][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runDeploymentsList(dropId, commandOptions, deps);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\tdeployments\n\t\t.command(\"get <dropId> <deploymentId>\")\n\t\t.description(\"Show deployment details\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (\n\t\t\t\tdropId: string,\n\t\t\t\tdeploymentId: string,\n\t\t\t\tcommandOptions: { json?: boolean },\n\t\t\t) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runDeploymentsGet>[3][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst result = await runDeploymentsGet(\n\t\t\t\t\tdropId,\n\t\t\t\t\tdeploymentId,\n\t\t\t\t\tcommandOptions,\n\t\t\t\t\tdeps,\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\t// --- Auth commands ---\n\n\tprogram\n\t\t.command(\"login\")\n\t\t.description(\"Authenticate with email OTP\")\n\t\t.option(\"--email <email>\", \"Email address\")\n\t\t.option(\"--otp <otp>\", \"One-time passcode\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (commandOptions: {\n\t\t\t\temail?: string;\n\t\t\t\totp?: string;\n\t\t\t\tjson?: boolean;\n\t\t\t}) => {\n\t\t\t\tif (!commandOptions.email || !commandOptions.otp) {\n\t\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\t\tParameters<typeof runLoginInteractive>[0][\"client\"]\n\t\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\t\tconst global = globalOptions(program, commandOptions);\n\t\t\t\t\tconst context = createContext({ global });\n\t\t\t\t\tconst result = await runLoginInteractive({\n\t\t\t\t\t\t...deps,\n\t\t\t\t\t\tcreateClient: (apiKey) =>\n\t\t\t\t\t\t\tcontext.createClient(apiKey) as Parameters<\n\t\t\t\t\t\t\t\ttypeof runLoginInteractive\n\t\t\t\t\t\t\t>[0][\"client\"],\n\t\t\t\t\t});\n\t\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runLoginVerify>[1][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst global = globalOptions(program, commandOptions);\n\t\t\t\tconst verifyContext = createContext({ global });\n\t\t\t\tconst result = await runLoginVerify(\n\t\t\t\t\t{\n\t\t\t\t\t\temail: commandOptions.email,\n\t\t\t\t\t\totp: commandOptions.otp,\n\t\t\t\t\t\t...(commandOptions.json !== undefined\n\t\t\t\t\t\t\t? { json: commandOptions.json }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t...deps,\n\t\t\t\t\t\tcreateClient: (apiKey) =>\n\t\t\t\t\t\t\tverifyContext.createClient(apiKey) as Parameters<\n\t\t\t\t\t\t\t\ttypeof runLoginVerify\n\t\t\t\t\t\t\t>[1][\"client\"],\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tconst login = program.commands.find((command) => command.name() === \"login\");\n\tlogin\n\t\t?.command(\"request\")\n\t\t.description(\"Request an email OTP\")\n\t\t.requiredOption(\"--email <email>\", \"Email address\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { email: string; json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runLoginRequest>[1][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runLoginRequest(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\tlogin\n\t\t?.command(\"verify\")\n\t\t.description(\"Verify email OTP and store an API key\")\n\t\t.requiredOption(\"--email <email>\", \"Email address\")\n\t\t.requiredOption(\"--otp <otp>\", \"One-time passcode\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(\n\t\t\tasync (commandOptions: {\n\t\t\t\temail: string;\n\t\t\t\totp: string;\n\t\t\t\tjson?: boolean;\n\t\t\t}) => {\n\t\t\t\tconst deps = await commandDeps<\n\t\t\t\t\tParameters<typeof runLoginVerify>[1][\"client\"]\n\t\t\t\t>(program, options, store, commandOptions);\n\t\t\t\tconst global = globalOptions(program, commandOptions);\n\t\t\t\tconst verifySubContext = createContext({ global });\n\t\t\t\tconst result = await runLoginVerify(commandOptions, {\n\t\t\t\t\t...deps,\n\t\t\t\t\tcreateClient: (apiKey) =>\n\t\t\t\t\t\tverifySubContext.createClient(apiKey) as Parameters<\n\t\t\t\t\t\t\ttypeof runLoginVerify\n\t\t\t\t\t\t>[1][\"client\"],\n\t\t\t\t});\n\t\t\t\tprocess.exitCode = result.exitCode;\n\t\t\t},\n\t\t);\n\n\tprogram\n\t\t.command(\"logout\")\n\t\t.description(\"Remove stored credentials\")\n\t\t.option(\"--revoke\", \"Best-effort revoke the saved API key\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { revoke?: boolean; json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<Parameters<typeof runLogout>[1][\"client\"]>(\n\t\t\t\tprogram,\n\t\t\t\toptions,\n\t\t\t\tstore,\n\t\t\t\tcommandOptions,\n\t\t\t);\n\t\t\tconst result = await runLogout(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\tprogram\n\t\t.command(\"whoami\")\n\t\t.description(\"Show current authentication status\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<unknown>(\n\t\t\t\tprogram,\n\t\t\t\toptions,\n\t\t\t\tstore,\n\t\t\t\tcommandOptions,\n\t\t\t);\n\t\t\tconst result = await runWhoami(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\tprogram\n\t\t.command(\"account\")\n\t\t.description(\"Show account details\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<\n\t\t\t\tParameters<typeof runAccountGet>[1][\"client\"]\n\t\t\t>(program, options, store, commandOptions);\n\t\t\tconst result = await runAccountGet(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\t// --- Diagnostics ---\n\n\tprogram\n\t\t.command(\"doctor\")\n\t\t.description(\"Report CLI diagnostics\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<unknown>(\n\t\t\t\tprogram,\n\t\t\t\toptions,\n\t\t\t\tstore,\n\t\t\t\tcommandOptions,\n\t\t\t);\n\t\t\tconst result = await runDoctor(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\tprogram\n\t\t.command(\"commands\")\n\t\t.description(\"Print machine-readable command metadata\")\n\t\t.option(\"--json\", \"Force JSON output\")\n\t\t.action(async (commandOptions: { json?: boolean }) => {\n\t\t\tconst deps = await commandDeps<unknown>(\n\t\t\t\tprogram,\n\t\t\t\toptions,\n\t\t\t\tstore,\n\t\t\t\tcommandOptions,\n\t\t\t);\n\t\t\tconst result = await runCommands(commandOptions, deps);\n\t\t\tprocess.exitCode = result.exitCode;\n\t\t});\n\n\treturn program;\n}\n\ntype RawCommandOptions = Omit<RawDropOptions, \"password\"> & {\n\tjson?: boolean;\n\tquiet?: boolean;\n\turl?: boolean;\n\tifRevision?: number;\n\tfromJson?: string;\n\tdryRun?: boolean;\n\tpassword?: string | boolean;\n};\n\ntype RunnerDeps<TClient> = {\n\tstore: CredentialStore;\n\tclient: TClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode: \"human\" | \"json\";\n};\n\nasync function commandDeps<TClient>(\n\tprogram: Command,\n\toptions: BuildProgramOptions,\n\tstore: CredentialStore,\n\tcommandOptions: { json?: boolean; quiet?: boolean },\n): Promise<RunnerDeps<TClient>> {\n\tconst global = globalOptions(program, commandOptions);\n\tconst context = createContext({\n\t\tglobal,\n\t\t...(options.env !== undefined ? { env: options.env } : {}),\n\t\t...(options.stdout !== undefined ? { stdout: options.stdout } : {}),\n\t\t...(options.stderr !== undefined ? { stderr: options.stderr } : {}),\n\t\t...(options.stdoutIsTTY !== undefined\n\t\t\t? { stdoutIsTTY: options.stdoutIsTTY }\n\t\t\t: {}),\n\t});\n\tconst credential = await resolveCredential({\n\t\t...(global.apiKey ? { apiKey: global.apiKey } : {}),\n\t\tenv: context.env,\n\t\tstore,\n\t});\n\treturn {\n\t\tstore,\n\t\tclient: (options.client ??\n\t\t\tcontext.createClient(credential?.apiKey)) as TClient,\n\t\t...(global.apiKey ? { apiKey: global.apiKey } : {}),\n\t\tenv: context.env,\n\t\tstdout: context.stdout,\n\t\tstderr: context.stderr,\n\t\toutputMode: context.output.mode,\n\t};\n}\n\nfunction globalOptions(\n\tprogram: Command,\n\tcommandOptions: { json?: boolean; quiet?: boolean },\n): GlobalOptions {\n\tconst opts = program.opts<GlobalOptions>();\n\treturn {\n\t\t...(opts.apiKey ? { apiKey: opts.apiKey } : {}),\n\t\t...(opts.apiUrl ? { apiUrl: opts.apiUrl } : {}),\n\t\t...(commandOptions.json !== undefined\n\t\t\t? { json: commandOptions.json }\n\t\t\t: opts.json !== undefined\n\t\t\t\t? { json: opts.json }\n\t\t\t\t: {}),\n\t\t...(commandOptions.quiet !== undefined\n\t\t\t? { quiet: commandOptions.quiet }\n\t\t\t: opts.quiet !== undefined\n\t\t\t\t? { quiet: opts.quiet }\n\t\t\t\t: {}),\n\t};\n}\n\nfunction toDropOptions(options: RawCommandOptions): RawDropOptions & {\n\tjson?: boolean;\n\tquiet?: boolean;\n\turl?: boolean;\n\tifRevision?: number;\n\tfromJson?: string;\n\tdryRun?: boolean;\n} {\n\treturn {\n\t\t...(options.slug ? { slug: options.slug } : {}),\n\t\t...(options.title ? { title: options.title } : {}),\n\t\t...(options.visibility === \"public\" || options.visibility === \"unlisted\"\n\t\t\t? { visibility: options.visibility }\n\t\t\t: {}),\n\t\t...(typeof options.password === \"string\"\n\t\t\t? { password: options.password }\n\t\t\t: {}),\n\t\t...(options.password === false || options.noPassword\n\t\t\t? { noPassword: true }\n\t\t\t: {}),\n\t\t...(options.noindex ? { noindex: true } : {}),\n\t\t...(options.index ? { index: true } : {}),\n\t\t...(options.expiresAt ? { expiresAt: options.expiresAt } : {}),\n\t\t...(options.metadata ? { metadata: options.metadata } : {}),\n\t\t...(options.metadataFile ? { metadataFile: options.metadataFile } : {}),\n\t\t...(options.entry ? { entry: options.entry } : {}),\n\t\t...(options.contentType ? { contentType: options.contentType } : {}),\n\t\t...(options.path ? { path: options.path } : {}),\n\t\t...(options.idempotencyKey\n\t\t\t? { idempotencyKey: options.idempotencyKey }\n\t\t\t: {}),\n\t\t...(options.json !== undefined ? { json: options.json } : {}),\n\t\t...(options.quiet !== undefined ? { quiet: options.quiet } : {}),\n\t\t...(options.url !== undefined ? { url: options.url } : {}),\n\t\t...(options.ifRevision !== undefined\n\t\t\t? { ifRevision: options.ifRevision }\n\t\t\t: {}),\n\t\t...(options.fromJson ? { fromJson: options.fromJson } : {}),\n\t\t...(options.dryRun ? { dryRun: options.dryRun } : {}),\n\t};\n}\n\nfunction parseInteger(value: string): number {\n\tconst n = Number.parseInt(value, 10);\n\tif (Number.isNaN(n)) throw new InvalidArgumentError(\"Expected an integer.\");\n\treturn n;\n}\n\nasync function resolveCommandInput(\n\tinput: string,\n\tstdin?: AsyncIterable<string | Uint8Array>,\n): Promise<string> {\n\tif (input !== \"-\") return input;\n\tconst buf = await readStdinBytes(stdin ?? process.stdin);\n\treturn buf.toString(\"utf8\");\n}\n\nasync function resolvePublishInputs(\n\tinputs: string[],\n\tstdin?: AsyncIterable<string | Uint8Array>,\n\tstdinIsTTY?: boolean,\n): Promise<string | undefined> {\n\tif (inputs.length === 0) {\n\t\tif (stdinIsTTY) return undefined;\n\t\tconst buf = await readStdinBytes(stdin ?? process.stdin);\n\t\tif (buf.length === 0) return undefined;\n\t\treturn buf.toString(\"utf8\");\n\t}\n\tif (inputs.length === 1) {\n\t\tif (inputs[0] === \"-\") {\n\t\t\tconst buf = await readStdinBytes(stdin ?? process.stdin);\n\t\t\treturn buf.toString(\"utf8\");\n\t\t}\n\t\treturn inputs[0];\n\t}\n\tconst {\n\t\tmkdtemp,\n\t\tcopyFile,\n\t\twriteFile,\n\t\tstat: fsStat,\n\t} = await import(\"node:fs/promises\");\n\tconst { join, basename: pathBasename } = await import(\"node:path\");\n\tconst { tmpdir } = await import(\"node:os\");\n\tconst tmpDir = await mkdtemp(join(tmpdir(), \"dropthis-multi-\"));\n\tconst resolved: string[] = [];\n\tfor (const input of inputs) {\n\t\tif (input === \"-\") {\n\t\t\tconst buf = await readStdinBytes(stdin ?? process.stdin);\n\t\t\tconst tmpPath = join(tmpDir, `stdin-${Date.now()}`);\n\t\t\tawait writeFile(tmpPath, buf);\n\t\t\tresolved.push(tmpPath);\n\t\t} else {\n\t\t\tresolved.push(input);\n\t\t}\n\t}\n\tconst names = resolved.map((f) => pathBasename(f));\n\tconst dupes = names.filter((n, i) => names.indexOf(n) !== i);\n\tif (dupes.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Duplicate file names: ${[...new Set(dupes)].join(\", \")}. Rename files to avoid collisions.`,\n\t\t);\n\t}\n\tfor (const filePath of resolved) {\n\t\tconst info = await fsStat(filePath);\n\t\tif (info.isDirectory()) {\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot mix directories with multiple file arguments. Use a single folder instead: dropthis publish ${filePath}`,\n\t\t\t);\n\t\t}\n\t\tconst destName = pathBasename(filePath);\n\t\tawait copyFile(filePath, join(tmpDir, destName));\n\t}\n\treturn tmpDir;\n}\n\nasync function readStdinBytes(\n\tstdin: AsyncIterable<string | Uint8Array>,\n): Promise<Buffer> {\n\tconst chunks: Buffer[] = [];\n\tfor await (const chunk of stdin) {\n\t\tchunks.push(\n\t\t\ttypeof chunk === \"string\" ? Buffer.from(chunk) : Buffer.from(chunk),\n\t\t);\n\t}\n\treturn Buffer.concat(chunks);\n}\n","import type { CredentialStore } from \"./storage.js\";\n\nexport type ResolvedCredential = {\n\tapiKey: string;\n\tsource: \"flag\" | \"env\" | \"storage\";\n\tkeyId?: string;\n\tkeyLast4?: string;\n\taccountId?: string;\n\temail?: string;\n};\n\nexport async function resolveCredential(input: {\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstore: CredentialStore;\n}): Promise<ResolvedCredential | null> {\n\tif (input.apiKey) return { apiKey: input.apiKey, source: \"flag\" };\n\tif (input.env.DROPTHIS_API_KEY) {\n\t\treturn { apiKey: input.env.DROPTHIS_API_KEY, source: \"env\" };\n\t}\n\tconst stored = await input.store.read();\n\tif (!stored) return null;\n\treturn {\n\t\tapiKey: stored.apiKey,\n\t\tsource: \"storage\",\n\t\t...(stored.keyId ? { keyId: stored.keyId } : {}),\n\t\t...(stored.keyLast4 ? { keyLast4: stored.keyLast4 } : {}),\n\t\t...(stored.accountId ? { accountId: stored.accountId } : {}),\n\t\t...(stored.email ? { email: stored.email } : {}),\n\t};\n}\n\nexport function maskKey(apiKey: string): string {\n\treturn apiKey.length <= 8\n\t\t? \"sk_...\"\n\t\t: `${apiKey.slice(0, 3)}...${apiKey.slice(-4)}`;\n}\n","export type OutputMode = \"human\" | \"json\";\nexport type CliErrorCode =\n\t| \"api_error\"\n\t| \"auth_error\"\n\t| \"credential_storage_unavailable\"\n\t| \"generic_error\"\n\t| \"invalid_usage\"\n\t| \"local_input_error\"\n\t| \"network_error\";\n\nexport type Output = {\n\tmode: OutputMode;\n\tquiet: boolean;\n};\n\nexport type ApiErrorDetails = {\n\tcode?: string;\n\tmessage: string;\n\tstatusCode?: number | null;\n\tdetail?: unknown;\n\tparam?: string | null;\n\tcurrentRevision?: number;\n\trequestId?: string | null;\n};\n\nconst UPLOAD_NEXT_ACTIONS: Record<string, string> = {\n\tupload_expired: \"Create a new upload session and retry the publish.\",\n\tupload_already_used:\n\t\t\"Create a new upload session; upload sessions are single-use.\",\n\tupload_verification_failed:\n\t\t\"Re-upload the file bytes and complete the upload again.\",\n\ttoo_many_active_uploads:\n\t\t\"Cancel unused uploads or wait for expired uploads to be cleaned.\",\n\tupload_not_complete: \"Complete the upload session before publishing.\",\n};\n\nexport function createOutput(input: {\n\tjson?: boolean;\n\tquiet?: boolean;\n\tstdoutIsTTY: boolean;\n\tenv: Record<string, string | undefined>;\n}): Output {\n\tconst json =\n\t\tinput.json === true ||\n\t\tinput.quiet === true ||\n\t\tinput.stdoutIsTTY === false ||\n\t\tinput.env.CI === \"true\";\n\treturn { mode: json ? \"json\" : \"human\", quiet: input.quiet === true };\n}\n\nexport function successEnvelope<T>(data: T): { ok: true; data: T } {\n\treturn { ok: true, data };\n}\n\nexport function errorEnvelope(\n\tcode: CliErrorCode,\n\tmessage: string,\n\tnextAction?: string,\n): {\n\tok: false;\n\terror: { code: CliErrorCode; message: string; next_action?: string };\n} {\n\treturn {\n\t\tok: false,\n\t\terror: {\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\t...(nextAction ? { next_action: nextAction } : {}),\n\t\t},\n\t};\n}\n\nexport function apiErrorEnvelope(error: ApiErrorDetails): {\n\tok: false;\n\terror: Record<string, unknown>;\n} {\n\treturn {\n\t\tok: false,\n\t\terror: {\n\t\t\tcode: error.code ?? \"api_error\",\n\t\t\tmessage: error.message,\n\t\t\t...(error.statusCode !== undefined ? { status: error.statusCode } : {}),\n\t\t\t...(typeof error.detail === \"string\" ? { detail: error.detail } : {}),\n\t\t\t...(error.param ? { param: error.param } : {}),\n\t\t\t...(error.currentRevision !== undefined\n\t\t\t\t? { current_revision: error.currentRevision }\n\t\t\t\t: {}),\n\t\t\t...(error.requestId ? { request_id: error.requestId } : {}),\n\t\t\tnext_action: nextActionForApiError(error),\n\t\t},\n\t};\n}\n\nfunction nextActionForApiError(error: ApiErrorDetails): string {\n\tconst uploadNextAction = error.code\n\t\t? UPLOAD_NEXT_ACTIONS[error.code]\n\t\t: undefined;\n\tif (uploadNextAction) return uploadNextAction;\n\tif (error.code === \"revision_conflict\") {\n\t\treturn \"Fetch the drop, merge your changes, and retry with the current revision.\";\n\t}\n\tif (error.statusCode === 401 || error.code === \"missing_api_key\") {\n\t\treturn \"Authenticate with dropthis login or set DROPTHIS_API_KEY.\";\n\t}\n\tif (error.statusCode === 413 || error.code === \"quota_exceeded\") {\n\t\treturn \"Reduce the upload size or upgrade the account limit.\";\n\t}\n\tif (error.statusCode === 422) {\n\t\treturn \"Fix the input shown in the error detail and retry.\";\n\t}\n\tif (\n\t\terror.statusCode !== undefined &&\n\t\terror.statusCode !== null &&\n\t\terror.statusCode >= 500\n\t) {\n\t\treturn \"Retry the request with the same idempotency key, or contact support with the request id.\";\n\t}\n\treturn \"Fix the request or retry after checking the drop state.\";\n}\n\nexport function exitCodeFor(code: CliErrorCode): number {\n\tif (code === \"invalid_usage\") return 2;\n\tif (code === \"auth_error\") return 3;\n\tif (code === \"local_input_error\") return 4;\n\tif (code === \"network_error\") return 5;\n\treturn 1;\n}\n","import pc from \"picocolors\";\n\nexport const symbols = {\n\tsuccess: \"✓\",\n\terror: \"✗\",\n\twarning: \"!\",\n} as const;\n\nexport function success(msg: string): string {\n\treturn `${pc.green(symbols.success)} ${msg}`;\n}\n\nexport function error(msg: string): string {\n\treturn `${pc.red(symbols.error)} ${msg}`;\n}\n\nexport function warn(msg: string): string {\n\treturn `${pc.yellow(symbols.warning)} ${msg}`;\n}\n\nexport function hint(msg: string): string {\n\treturn ` ${pc.dim(msg)}`;\n}\n\nexport function url(u: string): string {\n\treturn pc.cyan(u);\n}\n\nexport function label(key: string, value: string): string {\n\treturn `${pc.dim(`${key}:`)} ${value}`;\n}\n\nexport function kvLines(pairs: Array<[key: string, value: string]>): string {\n\tif (pairs.length === 0) return \"\";\n\tconst maxKey = Math.max(...pairs.map(([k]) => k.length));\n\treturn pairs\n\t\t.map(([k, v]) => ` ${pc.dim(`${k.padEnd(maxKey)}:`)} ${v}`)\n\t\t.join(\"\\n\");\n}\n","import type { ApiErrorDetails } from \"./output.js\";\nimport {\n\tapiErrorEnvelope,\n\ttype CliErrorCode,\n\terrorEnvelope,\n\texitCodeFor,\n} from \"./output.js\";\nimport { error, hint, kvLines, success, url } from \"./ui.js\";\n\ntype WriterDeps = {\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport function writeSuccess(\n\tdeps: WriterDeps,\n\tmessage: string,\n\tlink?: string,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tconst text = link ? `${message} ${url(link)}` : message;\n\t\tdeps.stdout(`${success(text)}\\n`);\n\t}\n}\n\nexport function writeUrl(deps: WriterDeps, link: string): void {\n\tdeps.stdout(`${url(link)}\\n`);\n}\n\nexport function writeResult(\n\tdeps: WriterDeps,\n\tlink: string,\n\tverb: string,\n\tdata: Record<string, unknown>,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stdout(`${success(`${verb} ${url(link)}`)}\\n`);\n\t} else {\n\t\tdeps.stdout(`${JSON.stringify({ ok: true, drop: data })}\\n`);\n\t}\n}\n\nexport function writeJson(\n\tdeps: WriterDeps,\n\tenvelope: Record<string, unknown>,\n): void {\n\tdeps.stdout(`${JSON.stringify(envelope)}\\n`);\n}\n\nexport function writeKv(\n\tdeps: WriterDeps,\n\tpairs: Array<[string, string]>,\n\tjson: Record<string, unknown>,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stdout(`${kvLines(pairs)}\\n`);\n\t} else {\n\t\tdeps.stdout(`${JSON.stringify(json)}\\n`);\n\t}\n}\n\nexport function writeHumanOrJson(\n\tdeps: WriterDeps,\n\thumanText: string,\n\tjson: Record<string, unknown>,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stdout(`${humanText}\\n`);\n\t} else {\n\t\tdeps.stdout(`${JSON.stringify(json)}\\n`);\n\t}\n}\n\nexport function writeError(\n\tdeps: WriterDeps,\n\tcode: CliErrorCode,\n\tmessage: string,\n\tnextAction?: string,\n): { exitCode: number } {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stderr(`${error(message)}\\n`);\n\t\tif (nextAction) deps.stderr(`${hint(nextAction)}\\n`);\n\t} else {\n\t\tdeps.stderr(\n\t\t\t`${JSON.stringify(errorEnvelope(code, message, nextAction))}\\n`,\n\t\t);\n\t}\n\treturn { exitCode: exitCodeFor(code) };\n}\n\nexport function writeApiError(\n\tdeps: WriterDeps,\n\tdetails: ApiErrorDetails,\n): { exitCode: number } {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stderr(`${error(details.message)}\\n`);\n\t\tconst nextAction = details.requestId\n\t\t\t? `Request ID: ${details.requestId}`\n\t\t\t: undefined;\n\t\tif (nextAction) deps.stderr(`${hint(nextAction)}\\n`);\n\t} else {\n\t\tdeps.stderr(`${JSON.stringify(apiErrorEnvelope(details))}\\n`);\n\t}\n\treturn { exitCode: exitCodeFor(\"api_error\") };\n}\n\nexport function writeApiErrorSimple(\n\tdeps: WriterDeps,\n\tmessage: string,\n): { exitCode: number } {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stderr(`${error(message)}\\n`);\n\t} else {\n\t\tdeps.stderr(`${JSON.stringify(errorEnvelope(\"api_error\", message))}\\n`);\n\t}\n\treturn { exitCode: exitCodeFor(\"api_error\") };\n}\n\nexport function writeAuthError(deps: WriterDeps): { exitCode: number } {\n\treturn writeError(\n\t\tdeps,\n\t\t\"auth_error\",\n\t\t\"No API key found.\",\n\t\t\"Set DROPTHIS_API_KEY or run dropthis login.\",\n\t);\n}\n\nexport function writeEmpty(\n\tdeps: WriterDeps,\n\tmessage: string,\n\tjson: Record<string, unknown>,\n): void {\n\tif (deps.outputMode === \"human\") {\n\t\tdeps.stdout(`${message}\\n`);\n\t} else {\n\t\tdeps.stdout(`${JSON.stringify(json)}\\n`);\n\t}\n}\n","import { resolveCredential } from \"../auth.js\";\nimport { writeApiErrorSimple, writeAuthError, writeKv } from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype AccountClient = {\n\taccount: { get(): Promise<SdkResult<unknown>> };\n};\n\ntype CommandDeps = {\n\tstore: CredentialStore;\n\tclient: AccountClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runAccountGet(\n\t_input: { json?: boolean },\n\tdeps: CommandDeps,\n): Promise<{ exitCode: number }> {\n\tif (\n\t\t(await resolveCredential({\n\t\t\t...(deps.apiKey ? { apiKey: deps.apiKey } : {}),\n\t\t\tenv: deps.env,\n\t\t\tstore: deps.store,\n\t\t})) === null\n\t) {\n\t\treturn writeAuthError(deps);\n\t}\n\tconst result = await deps.client.account.get();\n\tif (result.error) {\n\t\treturn writeApiErrorSimple(deps, result.error.message);\n\t}\n\tconst data = result.data as Record<string, unknown> | null;\n\tconst pairs: Array<[string, string]> = [];\n\tif (data?.id) pairs.push([\"ID\", String(data.id)]);\n\tif (data?.email) pairs.push([\"Email\", String(data.email)]);\n\tif (data?.plan) pairs.push([\"Plan\", String(data.plan)]);\n\n\twriteKv(deps, pairs, { ok: true, account: result.data });\n\treturn { exitCode: 0 };\n}\n","import * as prompts from \"@clack/prompts\";\nimport { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiErrorSimple,\n\twriteAuthError,\n\twriteEmpty,\n\twriteError,\n\twriteHumanOrJson,\n\twriteJson,\n\twriteKv,\n} from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { success } from \"../ui.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype ApiKeysCreateClient = {\n\tapiKeys: {\n\t\tcreate(input: {\n\t\t\tlabel: string;\n\t\t}): Promise<SdkResult<Record<string, unknown>>>;\n\t};\n};\n\ntype ApiKeysListClient = {\n\tapiKeys: {\n\t\tlist(): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype ApiKeysDeleteClient = {\n\tapiKeys: {\n\t\tdelete(\n\t\t\tkeyId: string,\n\t\t): Promise<SdkResult<null>> | SdkResult<null> | undefined;\n\t};\n};\n\ntype CommandDeps<TClient> = {\n\tstore: CredentialStore;\n\tclient: TClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runApiKeysCreate(\n\tinput: { label: string; json?: boolean },\n\tdeps: CommandDeps<ApiKeysCreateClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.apiKeys.create({ label: input.label });\n\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\tconst data = result.data;\n\tconst pairs: Array<[string, string]> = [];\n\tif (data.id) pairs.push([\"ID\", String(data.id)]);\n\tif (data.key) pairs.push([\"Key\", String(data.key)]);\n\tif (data.last4) pairs.push([\"Last 4\", String(data.last4)]);\n\twriteKv(deps, pairs, { ok: true, api_key: result.data });\n\treturn { exitCode: 0 };\n}\n\nexport async function runApiKeysList(\n\t_input: { json?: boolean },\n\tdeps: CommandDeps<ApiKeysListClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.apiKeys.list();\n\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\tconst raw = listItems(result.data);\n\tconst items = Array.isArray(raw)\n\t\t? (raw as Array<Record<string, unknown>>)\n\t\t: undefined;\n\tif (deps.outputMode === \"human\") {\n\t\tif (!items || items.length === 0) {\n\t\t\twriteEmpty(deps, \"No API keys found.\", { ok: true, api_keys: [] });\n\t\t} else {\n\t\t\tfor (const item of items) {\n\t\t\t\tdeps.stdout(\n\t\t\t\t\t`${item.id ?? \"\"} ${item.label ?? \"\"} ...${item.last4 ?? \"\"}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} else {\n\t\twriteJson(deps, { ok: true, api_keys: items ?? raw });\n\t}\n\treturn { exitCode: 0 };\n}\n\nexport async function runApiKeysDelete(\n\tkeyId: string,\n\tinput: { yes?: boolean; json?: boolean; interactive?: boolean },\n\tdeps: CommandDeps<ApiKeysDeleteClient>,\n): Promise<{ exitCode: number }> {\n\tif (!input.yes && input.interactive === false) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\t\"Pass --yes to delete in non-interactive mode.\",\n\t\t);\n\t}\n\tif (!input.yes && input.interactive !== false) {\n\t\tconst confirmed = await prompts.confirm({\n\t\t\tmessage: `Delete API key ${keyId}?`,\n\t\t});\n\t\tif (prompts.isCancel(confirmed) || !confirmed) {\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\t}\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.apiKeys.delete(keyId);\n\tif (result?.error) return writeApiErrorSimple(deps, result.error.message);\n\twriteHumanOrJson(deps, success(`Deleted ${keyId}`), {\n\t\tok: true,\n\t\tdeleted: true,\n\t\tid: keyId,\n\t});\n\treturn { exitCode: 0 };\n}\n\nasync function hasCredential(deps: CommandDeps<unknown>): Promise<boolean> {\n\treturn (\n\t\t(await resolveCredential({\n\t\t\t...(deps.apiKey ? { apiKey: deps.apiKey } : {}),\n\t\t\tenv: deps.env,\n\t\t\tstore: deps.store,\n\t\t})) !== null\n\t);\n}\n\nfunction listItems(data: unknown): unknown {\n\tif (data && typeof data === \"object\" && \"data\" in data) {\n\t\treturn (data as { data: unknown }).data;\n\t}\n\tif (data && typeof data === \"object\" && \"apiKeys\" in data) {\n\t\treturn (data as { apiKeys: unknown }).apiKeys;\n\t}\n\treturn data;\n}\n","const COMMANDS = [\n\t{\n\t\tname: \"publish\",\n\t\tdescription: \"Publish an input and return a Dropthis URL.\",\n\t\targuments: [\"input\"],\n\t\toptions: [\"--json\", \"--url\", \"--dry-run\", \"--title\", \"--metadata\"],\n\t\texamples: [\n\t\t\t\"dropthis publish ./site --json\",\n\t\t\t\"dropthis publish ./site --url\",\n\t\t\t\"dropthis publish ./dist --dry-run\",\n\t\t],\n\t},\n\t{\n\t\tname: \"update\",\n\t\tdescription: \"Update an existing drop by id.\",\n\t\targuments: [\"target\", \"input\"],\n\t\toptions: [\"--json\", \"--url\", \"--dry-run\", \"--if-revision\"],\n\t\texamples: [\n\t\t\t\"dropthis update drop_abc ./site --json\",\n\t\t\t\"dropthis update drop_abc --title 'New Title' --dry-run\",\n\t\t],\n\t},\n\t{\n\t\tname: \"deployments list <dropId>\",\n\t\tdescription: \"List deployments for a drop.\",\n\t\targuments: [\"dropId\"],\n\t\toptions: [\"--json\", \"--limit\", \"--cursor\"],\n\t\tauth: \"required\",\n\t\texamples: [\"dropthis deployments list drop_abc --json\"],\n\t},\n\t{\n\t\tname: \"deployments get <dropId> <deploymentId>\",\n\t\tdescription: \"Get deployment details for a drop.\",\n\t\targuments: [\"dropId\", \"deploymentId\"],\n\t\toptions: [\"--json\"],\n\t\tauth: \"required\",\n\t\texamples: [\"dropthis deployments get drop_abc dep_abc --json\"],\n\t},\n\t{\n\t\tname: \"drops\",\n\t\tdescription: \"List, inspect, update, and delete drops.\",\n\t\texamples: [\"dropthis drops list --json\"],\n\t},\n\t{\n\t\tname: \"api-keys\",\n\t\tdescription: \"Create, list, and delete API keys.\",\n\t\texamples: [\"dropthis api-keys create --label CI --json\"],\n\t},\n\t{\n\t\tname: \"login\",\n\t\tdescription: \"Authenticate with email OTP and store an API key.\",\n\t\texamples: [\n\t\t\t\"dropthis login verify --email user@example.com --otp 123456 --json\",\n\t\t],\n\t},\n\t{\n\t\tname: \"logout\",\n\t\tdescription: \"Remove stored local credentials.\",\n\t\texamples: [\"dropthis logout --json\"],\n\t},\n\t{\n\t\tname: \"whoami\",\n\t\tdescription: \"Show current auth source and credential metadata.\",\n\t\texamples: [\"dropthis whoami --json\"],\n\t},\n\t{\n\t\tname: \"account\",\n\t\tdescription: \"Get account details.\",\n\t\texamples: [\"dropthis account get --json\"],\n\t},\n\t{\n\t\tname: \"doctor\",\n\t\tdescription: \"Report local CLI diagnostics.\",\n\t\texamples: [\"dropthis doctor --json\"],\n\t},\n\t{\n\t\tname: \"commands\",\n\t\tdescription: \"Print this machine-readable command tree.\",\n\t\texamples: [\"dropthis commands --json\"],\n\t},\n];\n\nexport async function runCommands(\n\t_input: { json?: boolean },\n\tdeps: { stdout: (value: string) => void },\n): Promise<{ exitCode: number }> {\n\tdeps.stdout(\n\t\t`${JSON.stringify({\n\t\t\tok: true,\n\t\t\toutput: \"JSON by default in CI, pipes, non-TTY, --json, or --quiet.\",\n\t\t\tcommands: COMMANDS,\n\t\t})}\\n`,\n\t);\n\treturn { exitCode: 0 };\n}\n","import { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiError,\n\twriteAuthError,\n\twriteEmpty,\n\twriteJson,\n\twriteKv,\n} from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\ntype ApiError = {\n\tmessage: string;\n\tcode?: string;\n\tstatusCode?: number | null;\n\tdetail?: unknown;\n\tparam?: string | null;\n\trequestId?: string | null;\n};\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| { data: null; error: ApiError; headers?: Record<string, string> };\n\ntype DeploymentsClient = {\n\tdeployments: {\n\t\tlist(\n\t\t\tdropId: string,\n\t\t\tparams?: { limit?: number; cursor?: string },\n\t\t): Promise<SdkResult<unknown>>;\n\t\tget(dropId: string, deploymentId: string): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype Deps = {\n\tstore: CredentialStore;\n\tclient: DeploymentsClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runDeploymentsList(\n\tdropId: string,\n\tinput: { limit?: number; cursor?: string; json?: boolean },\n\tdeps: Deps,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst params = {\n\t\t...(input.limit !== undefined ? { limit: input.limit } : {}),\n\t\t...(input.cursor ? { cursor: input.cursor } : {}),\n\t};\n\tconst result = await deps.client.deployments.list(dropId, params);\n\tif (result.error) {\n\t\treturn writeApiError(deps, result.error);\n\t}\n\tconst spread = spreadData(result.data);\n\tconst items = (spread.deployments ?? spread.data ?? result.data) as\n\t\t| Array<Record<string, unknown>>\n\t\t| undefined;\n\tif (deps.outputMode === \"human\") {\n\t\tif (!items || (Array.isArray(items) && items.length === 0)) {\n\t\t\twriteEmpty(deps, \"No deployments found.\", {\n\t\t\t\tok: true,\n\t\t\t\t...spread,\n\t\t\t});\n\t\t} else if (Array.isArray(items)) {\n\t\t\tfor (const item of items) {\n\t\t\t\tdeps.stdout(\n\t\t\t\t\t`${item.id ?? \"\"} rev ${item.revision ?? \"?\"} ${item.created_at ?? \"\"}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\twriteJson(deps, { ok: true, ...spread });\n\t\t}\n\t} else {\n\t\twriteJson(deps, { ok: true, ...spread });\n\t}\n\treturn { exitCode: 0 };\n}\n\nexport async function runDeploymentsGet(\n\tdropId: string,\n\tdeploymentId: string,\n\t_input: { json?: boolean },\n\tdeps: Deps,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.deployments.get(dropId, deploymentId);\n\tif (result.error) {\n\t\treturn writeApiError(deps, result.error);\n\t}\n\tconst data = result.data as Record<string, unknown>;\n\tconst pairs: Array<[string, string]> = [];\n\tif (data.id) pairs.push([\"ID\", String(data.id)]);\n\tif (data.revision !== undefined)\n\t\tpairs.push([\"Revision\", String(data.revision)]);\n\tif (data.created_at) pairs.push([\"Created\", String(data.created_at)]);\n\twriteKv(deps, pairs, { ok: true, deployment: result.data });\n\treturn { exitCode: 0 };\n}\n\nasync function hasCredential(\n\tdeps: Pick<Deps, \"apiKey\" | \"env\" | \"store\">,\n): Promise<boolean> {\n\treturn (\n\t\t(await resolveCredential({\n\t\t\t...(deps.apiKey ? { apiKey: deps.apiKey } : {}),\n\t\t\tenv: deps.env,\n\t\t\tstore: deps.store,\n\t\t})) !== null\n\t);\n}\n\nfunction spreadData(data: unknown): Record<string, unknown> {\n\treturn data && typeof data === \"object\"\n\t\t? (data as Record<string, unknown>)\n\t\t: { data };\n}\n","import { resolveCredential } from \"../auth.js\";\nimport { writeKv } from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\ntype CommandDeps = {\n\tstore: CredentialStore;\n\tclient: unknown;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runDoctor(\n\t_input: { json?: boolean },\n\tdeps: CommandDeps,\n): Promise<{ exitCode: number }> {\n\tconst stored = await deps.store.read();\n\tconst credential = await resolveCredential({\n\t\tenv: deps.env,\n\t\tstore: deps.store,\n\t});\n\tconst authSource = credential?.source ?? \"missing\";\n\tconst storageBackend = stored?.storage ?? \"none\";\n\n\tconst pairs: Array<[string, string]> = [\n\t\t[\"Version\", PKG_VERSION],\n\t\t[\"Auth\", authSource],\n\t\t[\"Storage\", storageBackend],\n\t];\n\n\twriteKv(deps, pairs, {\n\t\tok: true,\n\t\tversion: PKG_VERSION,\n\t\tauth: { source: authSource },\n\t\tstorage: { backend: storageBackend },\n\t});\n\treturn { exitCode: 0 };\n}\n","import * as prompts from \"@clack/prompts\";\nimport { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiErrorSimple,\n\twriteAuthError,\n\twriteEmpty,\n\twriteError,\n\twriteHumanOrJson,\n\twriteJson,\n\twriteKv,\n} from \"../fmt.js\";\nimport { parseDropOptions, type RawDropOptions } from \"../options.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { url as fmtUrl, success } from \"../ui.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype DropsListClient = {\n\tdrops: {\n\t\tlist(params: {\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t}): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype DropsGetClient = {\n\tdrops: {\n\t\tget(dropId: string): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype DropsUpdateClient = {\n\tdrops: {\n\t\tupdate(\n\t\t\tdropId: string,\n\t\t\tinput: Record<string, unknown>,\n\t\t): Promise<SdkResult<unknown>>;\n\t};\n};\n\ntype DropsDeleteClient = {\n\tdrops: {\n\t\tdelete(\n\t\t\tdropId: string,\n\t\t): Promise<SdkResult<null>> | SdkResult<null> | undefined;\n\t};\n};\n\ntype CommandDeps<TClient> = {\n\tstore: CredentialStore;\n\tclient: TClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runDropsList(\n\tinput: { limit?: number; cursor?: string; json?: boolean },\n\tdeps: CommandDeps<DropsListClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst params = {\n\t\t...(input.limit !== undefined ? { limit: input.limit } : {}),\n\t\t...(input.cursor ? { cursor: input.cursor } : {}),\n\t};\n\tconst result = await deps.client.drops.list(params);\n\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\tconst raw = listItems(result.data);\n\tconst items = Array.isArray(raw)\n\t\t? (raw as Array<Record<string, unknown>>)\n\t\t: undefined;\n\tif (deps.outputMode === \"human\") {\n\t\tif (!items || items.length === 0) {\n\t\t\twriteEmpty(deps, \"No drops found.\", { ok: true, drops: [] });\n\t\t} else {\n\t\t\tfor (const item of items) {\n\t\t\t\tdeps.stdout(\n\t\t\t\t\t`${item.id ?? \"\"} ${item.title ?? \"\"} ${item.url ? fmtUrl(String(item.url)) : \"\"}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} else {\n\t\twriteJson(deps, { ok: true, drops: items ?? raw });\n\t}\n\treturn { exitCode: 0 };\n}\n\nexport async function runDropsGet(\n\tdropId: string,\n\t_input: { json?: boolean },\n\tdeps: CommandDeps<DropsGetClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.drops.get(dropId);\n\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\tconst data = result.data as Record<string, unknown>;\n\tconst pairs: Array<[string, string]> = [];\n\tif (data.id) pairs.push([\"ID\", String(data.id)]);\n\tif (data.url) pairs.push([\"URL\", fmtUrl(String(data.url))]);\n\tif (data.title) pairs.push([\"Title\", String(data.title)]);\n\tif (data.visibility) pairs.push([\"Visibility\", String(data.visibility)]);\n\tif (data.revision !== undefined)\n\t\tpairs.push([\"Revision\", String(data.revision)]);\n\tif (data.created_at) pairs.push([\"Created\", String(data.created_at)]);\n\twriteKv(deps, pairs, { ok: true, drop: result.data });\n\treturn { exitCode: 0 };\n}\n\nexport async function runDropsUpdate(\n\tdropId: string,\n\tinput: RawDropOptions & { json?: boolean },\n\tdeps: CommandDeps<DropsUpdateClient>,\n): Promise<{ exitCode: number }> {\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\ttry {\n\t\tconst options = await parseDropOptions(input);\n\t\tconst result = await deps.client.drops.update(dropId, options);\n\t\tif (result.error) return writeApiErrorSimple(deps, result.error.message);\n\t\twriteHumanOrJson(deps, success(`Updated ${dropId}`), {\n\t\t\tok: true,\n\t\t\tdrop: result.data,\n\t\t});\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\terror instanceof Error ? error.message : \"Invalid drop options.\",\n\t\t);\n\t}\n}\n\nexport async function runDropsDelete(\n\tdropId: string,\n\tinput: { yes?: boolean; json?: boolean; interactive?: boolean },\n\tdeps: CommandDeps<DropsDeleteClient>,\n): Promise<{ exitCode: number }> {\n\tif (!input.yes && input.interactive === false) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\t\"Pass --yes to delete in non-interactive mode.\",\n\t\t);\n\t}\n\tif (!input.yes && input.interactive !== false) {\n\t\tconst confirmed = await prompts.confirm({\n\t\t\tmessage: `Delete ${dropId}?`,\n\t\t});\n\t\tif (prompts.isCancel(confirmed) || !confirmed) {\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\t}\n\tif (!(await hasCredential(deps))) return writeAuthError(deps);\n\tconst result = await deps.client.drops.delete(dropId);\n\tif (result?.error) return writeApiErrorSimple(deps, result.error.message);\n\twriteHumanOrJson(deps, success(`Deleted ${dropId}`), {\n\t\tok: true,\n\t\tdeleted: true,\n\t\tid: dropId,\n\t});\n\treturn { exitCode: 0 };\n}\n\nasync function hasCredential(deps: CommandDeps<unknown>): Promise<boolean> {\n\treturn (\n\t\t(await resolveCredential({\n\t\t\t...(deps.apiKey ? { apiKey: deps.apiKey } : {}),\n\t\t\tenv: deps.env,\n\t\t\tstore: deps.store,\n\t\t})) !== null\n\t);\n}\n\nfunction listItems(data: unknown): unknown {\n\tif (data && typeof data === \"object\" && \"data\" in data) {\n\t\treturn (data as { data: unknown }).data;\n\t}\n\tif (data && typeof data === \"object\" && \"drops\" in data) {\n\t\treturn (data as { drops: unknown }).drops;\n\t}\n\treturn data;\n}\n","import { readFile } from \"node:fs/promises\";\n\nexport type RawDropOptions = {\n\tslug?: string;\n\ttitle?: string;\n\tvisibility?: \"public\" | \"unlisted\";\n\tpassword?: string;\n\tnoPassword?: boolean;\n\tnoindex?: boolean;\n\tindex?: boolean;\n\texpiresAt?: string;\n\tmetadata?: string;\n\tmetadataFile?: string;\n\tentry?: string;\n\tcontentType?: string;\n\tpath?: string;\n\tidempotencyKey?: string;\n};\n\nexport type ParsedDropOptions = {\n\tslug?: string;\n\ttitle?: string;\n\tvisibility?: \"public\" | \"unlisted\";\n\tpassword?: string | null;\n\tnoindex?: boolean;\n\texpiresAt?: string;\n\tmetadata?: Record<string, unknown>;\n\tentry?: string;\n\tcontentType?: string;\n\tpath?: string;\n\tidempotencyKey?: string;\n};\n\nexport async function parseDropOptions(\n\traw: RawDropOptions,\n): Promise<ParsedDropOptions> {\n\tif (raw.metadata && raw.metadataFile) {\n\t\tthrow new Error(\"Use either --metadata or --metadata-file, not both.\");\n\t}\n\tif (raw.password && raw.noPassword) {\n\t\tthrow new Error(\"Use either --password or --no-password, not both.\");\n\t}\n\tif (raw.noindex && raw.index) {\n\t\tthrow new Error(\"Use either --noindex or --index, not both.\");\n\t}\n\tconst metadata = raw.metadata\n\t\t? parseJsonObject(raw.metadata, \"--metadata\")\n\t\t: raw.metadataFile\n\t\t\t? parseJsonObject(\n\t\t\t\t\tawait readFile(raw.metadataFile, \"utf8\"),\n\t\t\t\t\t\"--metadata-file\",\n\t\t\t\t)\n\t\t\t: undefined;\n\treturn {\n\t\t...(raw.slug ? { slug: raw.slug } : {}),\n\t\t...(raw.title ? { title: raw.title } : {}),\n\t\t...(raw.visibility ? { visibility: raw.visibility } : {}),\n\t\t...(raw.password ? { password: raw.password } : {}),\n\t\t...(raw.noPassword ? { password: null } : {}),\n\t\t...(raw.noindex ? { noindex: true } : {}),\n\t\t...(raw.index ? { noindex: false } : {}),\n\t\t...(raw.expiresAt ? { expiresAt: raw.expiresAt } : {}),\n\t\t...(metadata ? { metadata } : {}),\n\t\t...(raw.entry ? { entry: raw.entry } : {}),\n\t\t...(raw.contentType ? { contentType: raw.contentType } : {}),\n\t\t...(raw.path ? { path: raw.path } : {}),\n\t\t...(raw.idempotencyKey ? { idempotencyKey: raw.idempotencyKey } : {}),\n\t};\n}\n\nfunction parseJsonObject(\n\tvalue: string,\n\tlabel: string,\n): Record<string, unknown> {\n\tconst parsed = JSON.parse(value) as unknown;\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`${label} must be a JSON object.`);\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n","import * as prompts from \"@clack/prompts\";\nimport { errorEnvelope, exitCodeFor } from \"../output.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype OtpRequestData = {\n\tok: true;\n\texpiresIn: number;\n};\n\ntype SessionData = {\n\ttoken: string;\n\taccountId: string;\n\tisNewAccount: boolean;\n};\n\ntype ApiKeyData = {\n\tid: string;\n\tkey: string;\n\tkeyLast4: string;\n\taccountId?: string | null;\n\tisNewAccount?: boolean;\n};\n\ntype LoginRequestClient = {\n\tauth: {\n\t\trequestEmailOtp(input: {\n\t\t\temail: string;\n\t\t}): Promise<SdkResult<OtpRequestData>>;\n\t};\n};\n\ntype LoginClient = {\n\tauth: {\n\t\tverifyEmailOtp(input: {\n\t\t\temail: string;\n\t\t\tcode: string;\n\t\t}): Promise<SdkResult<SessionData>>;\n\t};\n\tapiKeys: {\n\t\tcreate(input: { label: string }): Promise<SdkResult<ApiKeyData>>;\n\t};\n};\n\ntype LoginInteractiveClient = LoginRequestClient & LoginClient;\n\nexport async function runLoginInteractive(deps: {\n\tclient: LoginInteractiveClient;\n\tcreateClient: (apiKey: string) => LoginInteractiveClient;\n\tstore: CredentialStore;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n}): Promise<{ exitCode: number }> {\n\tprompts.intro(\"dropthis login\");\n\n\tconst email = await prompts.text({\n\t\tmessage: \"Email address\",\n\t\tvalidate: (v) => (v?.includes(\"@\") ? undefined : \"Enter a valid email\"),\n\t});\n\tif (prompts.isCancel(email)) {\n\t\tprompts.cancel(\"Login cancelled.\");\n\t\treturn { exitCode: 0 };\n\t}\n\n\tconst requestResult = await deps.client.auth.requestEmailOtp({ email });\n\tif (requestResult.error) {\n\t\tprompts.cancel(requestResult.error.message);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\n\tconst otp = await prompts.text({\n\t\tmessage: \"Paste the code from your email\",\n\t});\n\tif (prompts.isCancel(otp)) {\n\t\tprompts.cancel(\"Login cancelled.\");\n\t\treturn { exitCode: 0 };\n\t}\n\n\tconst session = await deps.client.auth.verifyEmailOtp({ email, code: otp });\n\tif (session.error) {\n\t\tprompts.cancel(session.error.message);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\n\tconst authedClient = deps.createClient(session.data.token);\n\tconst apiKey = await authedClient.apiKeys.create({ label: \"CLI\" });\n\tif (apiKey.error) {\n\t\tprompts.cancel(apiKey.error.message);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\n\tawait deps.store.save({\n\t\tapiKey: apiKey.data.key,\n\t\tkeyId: apiKey.data.id,\n\t\tkeyLast4: apiKey.data.keyLast4,\n\t\taccountId: apiKey.data.accountId ?? session.data.accountId,\n\t\temail,\n\t\tstorage: \"secure\",\n\t});\n\n\tprompts.outro(\"Logged in successfully.\");\n\treturn { exitCode: 0 };\n}\n\nexport async function runLoginRequest(\n\tinput: { email: string; json?: boolean },\n\tdeps: {\n\t\tclient: LoginRequestClient;\n\t\tstdout: (value: string) => void;\n\t\tstderr: (value: string) => void;\n\t},\n): Promise<{ exitCode: number }> {\n\tconst result = await deps.client.auth.requestEmailOtp({\n\t\temail: input.email,\n\t});\n\tif (result.error) {\n\t\tdeps.stderr(\n\t\t\t`${JSON.stringify(errorEnvelope(\"api_error\", result.error.message))}\\n`,\n\t\t);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\tdeps.stdout(\n\t\t`${JSON.stringify({\n\t\t\tok: true,\n\t\t\temail: input.email,\n\t\t\texpires_in: result.data.expiresIn,\n\t\t})}\\n`,\n\t);\n\treturn { exitCode: 0 };\n}\n\nexport async function runLoginVerify(\n\tinput: { email: string; otp: string; json?: boolean },\n\tdeps: {\n\t\tclient: LoginClient;\n\t\tcreateClient: (apiKey: string) => LoginClient;\n\t\tstore: CredentialStore;\n\t\tstdout: (value: string) => void;\n\t\tstderr: (value: string) => void;\n\t},\n): Promise<{ exitCode: number }> {\n\tconst session = await deps.client.auth.verifyEmailOtp({\n\t\temail: input.email,\n\t\tcode: input.otp,\n\t});\n\tif (session.error) {\n\t\tdeps.stderr(\n\t\t\t`${JSON.stringify(errorEnvelope(\"api_error\", session.error.message))}\\n`,\n\t\t);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\tconst authedClient = deps.createClient(session.data.token);\n\tconst apiKey = await authedClient.apiKeys.create({ label: \"CLI\" });\n\tif (apiKey.error) {\n\t\tdeps.stderr(\n\t\t\t`${JSON.stringify(errorEnvelope(\"api_error\", apiKey.error.message))}\\n`,\n\t\t);\n\t\treturn { exitCode: exitCodeFor(\"api_error\") };\n\t}\n\tawait deps.store.save({\n\t\tapiKey: apiKey.data.key,\n\t\tkeyId: apiKey.data.id,\n\t\tkeyLast4: apiKey.data.keyLast4,\n\t\taccountId: apiKey.data.accountId ?? session.data.accountId,\n\t\temail: input.email,\n\t\tstorage: \"secure\",\n\t});\n\tdeps.stdout(\n\t\t`${JSON.stringify({\n\t\t\tok: true,\n\t\t\taccount_id: apiKey.data.accountId ?? session.data.accountId,\n\t\t\tkey_id: apiKey.data.id,\n\t\t\tkey_last4: apiKey.data.keyLast4,\n\t\t\tis_new_account: apiKey.data.isNewAccount ?? session.data.isNewAccount,\n\t\t})}\\n`,\n\t);\n\treturn { exitCode: 0 };\n}\n","import { writeApiErrorSimple, writeHumanOrJson } from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { success } from \"../ui.js\";\n\ntype DeleteResult =\n\t| { data: null; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: { message: string };\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype LogoutClient = {\n\tapiKeys: {\n\t\tdelete(\n\t\t\tkeyId: string,\n\t\t): DeleteResult | Promise<DeleteResult> | undefined | Promise<undefined>;\n\t};\n};\n\nexport async function runLogout(\n\tinput: { json?: boolean; revoke?: boolean },\n\tdeps: {\n\t\tstore: CredentialStore;\n\t\tclient: LogoutClient;\n\t\tstdout: (value: string) => void;\n\t\tstderr: (value: string) => void;\n\t\toutputMode?: \"human\" | \"json\";\n\t},\n): Promise<{ exitCode: number }> {\n\tconst stored = await deps.store.read();\n\tlet revokeError: string | undefined;\n\tif (input.revoke && stored?.keyId) {\n\t\tconst result = await deps.client.apiKeys.delete(stored.keyId);\n\t\tif (result?.error) revokeError = result.error.message;\n\t}\n\tif (revokeError) {\n\t\treturn writeApiErrorSimple(deps, revokeError);\n\t}\n\tawait deps.store.clear();\n\twriteHumanOrJson(deps, success(\"Logged out.\"), { ok: true });\n\treturn { exitCode: 0 };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { stat } from \"node:fs/promises\";\nimport { basename, extname } from \"node:path\";\nimport { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiError,\n\twriteAuthError,\n\twriteError,\n\twriteResult,\n} from \"../fmt.js\";\nimport {\n\ttype ParsedDropOptions,\n\tparseDropOptions,\n\ttype RawDropOptions,\n} from \"../options.js\";\nimport type { ApiErrorDetails } from \"../output.js\";\nimport { createSpinner, shouldSpin } from \"../spinner.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { readJsonObjectFile } from \"./json_body.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| {\n\t\t\tdata: null;\n\t\t\terror: ApiErrorDetails;\n\t\t\theaders?: Record<string, string>;\n\t };\n\ntype DropData = { url: string; [key: string]: unknown };\n\ntype ManifestFile = {\n\tpath: string;\n\tcontentType: string;\n\tsizeBytes: number;\n};\n\ntype PreparedResult = {\n\tkind: \"staged\";\n\tmanifest: { files: ManifestFile[]; entry?: string | null };\n\toptions: Record<string, unknown>;\n\tmetadata?: Record<string, unknown>;\n};\n\ntype PublishClient = {\n\tpublish(\n\t\tinput: string,\n\t\toptions: ParsedDropOptions,\n\t): Promise<SdkResult<DropData>>;\n\tprepare?(input: string, options: ParsedDropOptions): Promise<PreparedResult>;\n\tdrops: {\n\t\tcreateRaw(\n\t\t\tbody: unknown,\n\t\t\toptions?: { idempotencyKey?: string },\n\t\t): Promise<SdkResult<DropData>>;\n\t};\n};\n\ntype PublishOptions = RawDropOptions & {\n\tdryRun?: boolean;\n\tfromJson?: string;\n\tjson?: boolean;\n\tquiet?: boolean;\n\turl?: boolean;\n\tapiKey?: string;\n};\n\ntype PublishDeps = {\n\tstore: CredentialStore;\n\tclient: PublishClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\treadJsonObject?: (path: string) => Promise<Record<string, unknown>>;\n\toutputMode?: \"human\" | \"json\";\n};\n\nconst MAX_BUNDLE_FILE_COUNT = 200;\n\nexport async function runPublish(\n\tinput: string | string[] | undefined,\n\traw: PublishOptions,\n\tdeps: PublishDeps,\n): Promise<{ exitCode: number }> {\n\tconst credential = await resolveCredential({\n\t\t...((raw.apiKey ?? deps.apiKey)\n\t\t\t? { apiKey: raw.apiKey ?? deps.apiKey }\n\t\t\t: {}),\n\t\tenv: deps.env,\n\t\tstore: deps.store,\n\t});\n\tif (!credential) {\n\t\treturn writeAuthError(deps);\n\t}\n\n\tif (raw.dryRun) {\n\t\treturn handlePublishDryRun(input, raw, deps);\n\t}\n\n\tconst singleInput = Array.isArray(input) ? input[0] : input;\n\tconst spin = shouldSpin(deps.outputMode)\n\t\t? createSpinner(\"Publishing…\", deps.stderr)\n\t\t: undefined;\n\ttry {\n\t\tif (raw.fromJson && singleInput) {\n\t\t\tthrow new Error(\"Use either <input> or --from-json, not both.\");\n\t\t}\n\t\tconst options = withPublishIdempotency(await parseDropOptions(raw));\n\t\tconst result = raw.fromJson\n\t\t\t? await deps.client.drops.createRaw(\n\t\t\t\t\tawait (deps.readJsonObject ?? readJsonObjectFile)(raw.fromJson),\n\t\t\t\t\toptions.idempotencyKey\n\t\t\t\t\t\t? { idempotencyKey: options.idempotencyKey }\n\t\t\t\t\t\t: {},\n\t\t\t\t)\n\t\t\t: singleInput\n\t\t\t\t? await deps.client.publish(singleInput, options)\n\t\t\t\t: (() => {\n\t\t\t\t\t\tthrow new Error(\"Publish requires <input> or --from-json.\");\n\t\t\t\t\t})();\n\t\tif (result.error) {\n\t\t\tspin?.fail();\n\t\t\treturn writeApiError(deps, result.error);\n\t\t}\n\t\tspin?.stop();\n\t\tif (raw.url) deps.stdout(`${result.data.url}\\n`);\n\t\telse writeResult(deps, result.data.url, \"Published\", result.data);\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"Publish failed.\";\n\t\tspin?.fail();\n\t\treturn writeError(deps, \"invalid_usage\", message);\n\t}\n}\n\nasync function handlePublishDryRun(\n\tinput: string | string[] | undefined,\n\traw: PublishOptions,\n\tdeps: PublishDeps,\n): Promise<{ exitCode: number }> {\n\tif (raw.url) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\t\"--url and --dry-run cannot be combined.\",\n\t\t\t\"Remove --url; dry-run outputs JSON describing what would be published.\",\n\t\t);\n\t}\n\ttry {\n\t\tif (raw.fromJson) {\n\t\t\tif (input)\n\t\t\t\tthrow new Error(\"Use either <input> or --from-json, not both.\");\n\t\t\tconst body = await (deps.readJsonObject ?? readJsonObjectFile)(\n\t\t\t\traw.fromJson,\n\t\t\t);\n\t\t\tdeps.stdout(\n\t\t\t\t`${JSON.stringify({ dryRun: true, kind: \"raw_json\", endpoint: \"POST /drops\", body }, null, 2)}\\n`,\n\t\t\t);\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\n\t\tif (!input || (Array.isArray(input) && input.length === 0)) {\n\t\t\tthrow new Error(\"Publish requires <input> or --from-json.\");\n\t\t}\n\n\t\tconst options = await parseDropOptions(raw);\n\n\t\tif (Array.isArray(input)) {\n\t\t\treturn dryRunMultiFile(input, options, deps);\n\t\t}\n\n\t\tif (!deps.client.prepare) {\n\t\t\tthrow new Error(\"Client does not support dry-run.\");\n\t\t}\n\t\tconst prepared = await deps.client.prepare(input, options);\n\t\tconst output = formatDryRunOutput(prepared);\n\t\tvalidateDryRunOutput(output);\n\t\tdeps.stdout(`${JSON.stringify(output, null, 2)}\\n`);\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\tconst code = isFileSystemError(error)\n\t\t\t? \"local_input_error\"\n\t\t\t: \"invalid_usage\";\n\t\tconst message = error instanceof Error ? error.message : \"Dry-run failed.\";\n\t\treturn writeError(deps, code, message);\n\t}\n}\n\nasync function dryRunMultiFile(\n\tinputs: string[],\n\toptions: ParsedDropOptions,\n\tdeps: PublishDeps,\n): Promise<{ exitCode: number }> {\n\tconst files: ManifestFile[] = [];\n\tfor (const filePath of inputs) {\n\t\tlet info: Awaited<ReturnType<typeof stat>>;\n\t\ttry {\n\t\t\tinfo = await stat(filePath);\n\t\t} catch {\n\t\t\treturn writeError(\n\t\t\t\tdeps,\n\t\t\t\t\"local_input_error\",\n\t\t\t\t`File not found: ${filePath}`,\n\t\t\t);\n\t\t}\n\t\tif (info.isDirectory()) {\n\t\t\treturn writeError(\n\t\t\t\tdeps,\n\t\t\t\t\"local_input_error\",\n\t\t\t\t`Cannot mix directories with multiple file arguments. Use a single folder instead: dropthis publish ${filePath}`,\n\t\t\t);\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: basename(filePath),\n\t\t\tcontentType: mimeForPath(filePath),\n\t\t\tsizeBytes: info.size,\n\t\t});\n\t}\n\n\tif (files.length > MAX_BUNDLE_FILE_COUNT) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"local_input_error\",\n\t\t\t`Bundle contains ${files.length} files, exceeding the maximum of ${MAX_BUNDLE_FILE_COUNT}.`,\n\t\t);\n\t}\n\n\tconst entry =\n\t\toptions.entry ??\n\t\tfiles.find((f) => f.path === \"index.html\")?.path ??\n\t\tfiles[0]?.path ??\n\t\tnull;\n\tconst totalBytes = files.reduce((sum, f) => sum + f.sizeBytes, 0);\n\tconst output = {\n\t\tdryRun: true as const,\n\t\tkind: \"staged\" as const,\n\t\tmanifest: { files, entry },\n\t\toptions: dryRunOptionsBody(options),\n\t\ttotalBytes,\n\t};\n\n\tdeps.stdout(`${JSON.stringify(output, null, 2)}\\n`);\n\treturn { exitCode: 0 };\n}\n\nfunction formatDryRunOutput(prepared: PreparedResult): Record<string, unknown> {\n\tconst totalBytes = prepared.manifest.files.reduce(\n\t\t(sum, f) => sum + f.sizeBytes,\n\t\t0,\n\t);\n\treturn {\n\t\tdryRun: true,\n\t\tkind: \"staged\",\n\t\tmanifest: {\n\t\t\tfiles: prepared.manifest.files,\n\t\t\tentry: prepared.manifest.entry ?? null,\n\t\t},\n\t\toptions: prepared.options,\n\t\t...(prepared.metadata ? { metadata: prepared.metadata } : {}),\n\t\ttotalBytes,\n\t};\n}\n\nfunction validateDryRunOutput(output: Record<string, unknown>): void {\n\tif (output.kind !== \"staged\") return;\n\tconst manifest = output.manifest as {\n\t\tfiles: ManifestFile[];\n\t};\n\tif (manifest.files.length > MAX_BUNDLE_FILE_COUNT) {\n\t\tthrow Object.assign(\n\t\t\tnew Error(\n\t\t\t\t`Bundle contains ${manifest.files.length} files, exceeding the maximum of ${MAX_BUNDLE_FILE_COUNT}.`,\n\t\t\t),\n\t\t\t{ code: \"ELIMIT\" },\n\t\t);\n\t}\n}\n\nfunction dryRunOptionsBody(\n\toptions: ParsedDropOptions,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\tif (options.title) result.title = options.title;\n\tif (options.visibility) result.visibility = options.visibility;\n\tif (options.password !== undefined) result.password = options.password;\n\tif (options.noindex !== undefined) result.noindex = options.noindex;\n\tif (options.expiresAt) result.expires_at = options.expiresAt;\n\treturn result;\n}\n\nfunction mimeForPath(filePath: string): string {\n\tconst ext = extname(filePath).toLowerCase();\n\tconst types: Record<string, string> = {\n\t\t\".html\": \"text/html\",\n\t\t\".htm\": \"text/html\",\n\t\t\".css\": \"text/css\",\n\t\t\".js\": \"text/javascript\",\n\t\t\".mjs\": \"text/javascript\",\n\t\t\".json\": \"application/json\",\n\t\t\".xml\": \"application/xml\",\n\t\t\".svg\": \"image/svg+xml\",\n\t\t\".txt\": \"text/plain\",\n\t\t\".md\": \"text/markdown\",\n\t\t\".jpg\": \"image/jpeg\",\n\t\t\".jpeg\": \"image/jpeg\",\n\t\t\".png\": \"image/png\",\n\t\t\".gif\": \"image/gif\",\n\t\t\".webp\": \"image/webp\",\n\t\t\".ico\": \"image/x-icon\",\n\t\t\".avif\": \"image/avif\",\n\t\t\".pdf\": \"application/pdf\",\n\t\t\".zip\": \"application/zip\",\n\t\t\".woff\": \"font/woff\",\n\t\t\".woff2\": \"font/woff2\",\n\t\t\".ttf\": \"font/ttf\",\n\t\t\".mp4\": \"video/mp4\",\n\t\t\".webm\": \"video/webm\",\n\t};\n\treturn types[ext] ?? \"application/octet-stream\";\n}\n\nfunction isFileSystemError(error: unknown): boolean {\n\tif (!(error instanceof Error)) return false;\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code === \"ENOENT\" || code === \"ENOTDIR\" || code === \"ELIMIT\";\n}\n\nfunction withPublishIdempotency(options: ParsedDropOptions): ParsedDropOptions {\n\treturn options.idempotencyKey\n\t\t? options\n\t\t: { ...options, idempotencyKey: `cli_pub_${randomUUID()}` };\n}\n","import pc from \"picocolors\";\nimport { symbols } from \"./ui.js\";\n\nconst frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\nexport type Spinner = {\n\tstop(): void;\n\tfail(): void;\n};\n\nexport function createSpinner(\n\tmessage: string,\n\tstderr: (value: string) => void,\n): Spinner {\n\tlet i = 0;\n\tconst timer = setInterval(() => {\n\t\tstderr(`\\r\\x1B[2K${pc.cyan(frames[i % frames.length])} ${message}`);\n\t\ti++;\n\t}, 80);\n\n\treturn {\n\t\tstop() {\n\t\t\tclearInterval(timer);\n\t\t\tstderr(\"\\r\\x1B[2K\");\n\t\t},\n\t\tfail() {\n\t\t\tclearInterval(timer);\n\t\t\tstderr(\"\\r\\x1B[2K\");\n\t\t},\n\t};\n}\n\nexport function shouldSpin(outputMode?: \"human\" | \"json\"): boolean {\n\treturn (\n\t\toutputMode === \"human\" && process.stderr.isTTY === true && !process.env.CI\n\t);\n}\n","import { readFile } from \"node:fs/promises\";\n\nexport async function readJsonObjectFile(\n\tpath: string,\n): Promise<Record<string, unknown>> {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(await readFile(path, \"utf8\"));\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error ? error.message : \"Unknown parse error\";\n\t\tthrow new Error(`Invalid JSON body in ${path}: ${message}`);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(\"JSON body must be an object.\");\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n","import { randomUUID } from \"node:crypto\";\nimport { resolveCredential } from \"../auth.js\";\nimport {\n\twriteApiError,\n\twriteAuthError,\n\twriteError,\n\twriteResult,\n} from \"../fmt.js\";\nimport {\n\ttype ParsedDropOptions,\n\tparseDropOptions,\n\ttype RawDropOptions,\n} from \"../options.js\";\nimport type { ApiErrorDetails } from \"../output.js\";\nimport { createSpinner, shouldSpin } from \"../spinner.js\";\nimport type { CredentialStore } from \"../storage.js\";\nimport { readJsonObjectFile } from \"./json_body.js\";\n\ntype SdkResult<T> =\n\t| { data: T; error: null; headers?: Record<string, string> }\n\t| { data: null; error: ApiErrorDetails; headers?: Record<string, string> };\n\ntype DropData = { url: string; [key: string]: unknown };\ntype UpdateOptions = ParsedDropOptions & { ifRevision?: number };\n\ntype ManifestFile = {\n\tpath: string;\n\tcontentType: string;\n\tsizeBytes: number;\n};\n\ntype PreparedResult = {\n\tkind: \"staged\";\n\tmanifest: { files: ManifestFile[]; entry?: string | null };\n\toptions: Record<string, unknown>;\n\tmetadata?: Record<string, unknown>;\n};\n\ntype UpdateClient = {\n\tupdate(\n\t\ttarget: string,\n\t\tinputOrOptions: string | UpdateOptions,\n\t\toptions?: UpdateOptions,\n\t): Promise<SdkResult<DropData>>;\n\tprepare?(input: string, options: ParsedDropOptions): Promise<PreparedResult>;\n\tdeployments: {\n\t\tcreateRaw(\n\t\t\tdropId: string,\n\t\t\tbody: unknown,\n\t\t\toptions?: { idempotencyKey?: string; ifRevision?: number },\n\t\t): Promise<SdkResult<DropData>>;\n\t};\n};\n\ntype RawUpdateOptions = RawDropOptions & {\n\tdryRun?: boolean;\n\tifRevision?: number;\n\tfromJson?: string;\n\tjson?: boolean;\n\tquiet?: boolean;\n\turl?: boolean;\n\tapiKey?: string;\n};\n\ntype UpdateDeps = {\n\tstore: CredentialStore;\n\tclient: UpdateClient;\n\tapiKey?: string;\n\tenv: Record<string, string | undefined>;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\treadJsonObject?: (path: string) => Promise<Record<string, unknown>>;\n\toutputMode?: \"human\" | \"json\";\n};\n\nexport async function runUpdate(\n\ttarget: string,\n\tinput: string | undefined,\n\traw: RawUpdateOptions,\n\tdeps: UpdateDeps,\n): Promise<{ exitCode: number }> {\n\tconst credential = await resolveCredential({\n\t\t...((raw.apiKey ?? deps.apiKey)\n\t\t\t? { apiKey: raw.apiKey ?? deps.apiKey }\n\t\t\t: {}),\n\t\tenv: deps.env,\n\t\tstore: deps.store,\n\t});\n\tif (!credential) {\n\t\treturn writeAuthError(deps);\n\t}\n\n\tif (raw.dryRun) {\n\t\treturn handleUpdateDryRun(target, input, raw, deps);\n\t}\n\n\tconst spin = shouldSpin(deps.outputMode)\n\t\t? createSpinner(\"Updating…\", deps.stderr)\n\t\t: undefined;\n\ttry {\n\t\tassertDropId(target);\n\t\tif (raw.fromJson && input) {\n\t\t\tthrow new Error(\"Use either [input] or --from-json, not both.\");\n\t\t}\n\t\tconst parsed = await parseDropOptions(raw);\n\t\tconst revisionOptions =\n\t\t\traw.ifRevision !== undefined\n\t\t\t\t? { ifRevision: Number(raw.ifRevision) }\n\t\t\t\t: {};\n\t\tconst result = raw.fromJson\n\t\t\t? await deps.client.deployments.createRaw(\n\t\t\t\t\ttarget,\n\t\t\t\t\tawait (deps.readJsonObject ?? readJsonObjectFile)(raw.fromJson),\n\t\t\t\t\twithUpdateIdempotency({\n\t\t\t\t\t\t...revisionOptions,\n\t\t\t\t\t\t...(parsed.idempotencyKey\n\t\t\t\t\t\t\t? { idempotencyKey: parsed.idempotencyKey }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: input\n\t\t\t\t? await deps.client.update(\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\twithUpdateIdempotency({\n\t\t\t\t\t\t\t...parsed,\n\t\t\t\t\t\t\t...revisionOptions,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t: await deps.client.update(target, parsed, revisionOptions);\n\t\tif (result.error) {\n\t\t\tspin?.fail();\n\t\t\treturn writeApiError(deps, result.error);\n\t\t}\n\t\tspin?.stop();\n\t\tif (raw.url) deps.stdout(`${result.data.url}\\n`);\n\t\telse writeResult(deps, result.data.url, \"Updated\", result.data);\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"Update failed.\";\n\t\tspin?.fail();\n\t\treturn writeError(deps, \"invalid_usage\", message);\n\t}\n}\n\nasync function handleUpdateDryRun(\n\ttarget: string,\n\tinput: string | undefined,\n\traw: RawUpdateOptions,\n\tdeps: UpdateDeps,\n): Promise<{ exitCode: number }> {\n\tif (raw.url) {\n\t\treturn writeError(\n\t\t\tdeps,\n\t\t\t\"invalid_usage\",\n\t\t\t\"--url and --dry-run cannot be combined.\",\n\t\t\t\"Remove --url; dry-run outputs JSON describing what would be published.\",\n\t\t);\n\t}\n\ttry {\n\t\tassertDropId(target);\n\n\t\tif (raw.fromJson) {\n\t\t\tif (input)\n\t\t\t\tthrow new Error(\"Use either [input] or --from-json, not both.\");\n\t\t\tconst body = await (deps.readJsonObject ?? readJsonObjectFile)(\n\t\t\t\traw.fromJson,\n\t\t\t);\n\t\t\tdeps.stdout(\n\t\t\t\t`${JSON.stringify({ dryRun: true, kind: \"raw_json\", endpoint: `POST /drops/${target}/deployments`, body }, null, 2)}\\n`,\n\t\t\t);\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\n\t\tconst options = await parseDropOptions(raw);\n\n\t\tif (!input) {\n\t\t\tconst fields: Record<string, unknown> = {};\n\t\t\tif (options.slug) fields.slug = options.slug;\n\t\t\tif (options.title) fields.title = options.title;\n\t\t\tif (options.visibility) fields.visibility = options.visibility;\n\t\t\tif (options.password !== undefined) fields.password = options.password;\n\t\t\tif (options.noindex !== undefined) fields.noindex = options.noindex;\n\t\t\tif (options.expiresAt) fields.expires_at = options.expiresAt;\n\t\t\tif (options.metadata) fields.metadata = options.metadata;\n\t\t\tdeps.stdout(\n\t\t\t\t`${JSON.stringify({ dryRun: true, kind: \"options_update\", target, fields }, null, 2)}\\n`,\n\t\t\t);\n\t\t\treturn { exitCode: 0 };\n\t\t}\n\n\t\tif (!deps.client.prepare) {\n\t\t\tthrow new Error(\"Client does not support dry-run.\");\n\t\t}\n\t\tconst prepared = await deps.client.prepare(input, options);\n\t\tconst output = formatUpdateDryRun(target, prepared);\n\t\tvalidateDryRunFileCount(output);\n\t\tdeps.stdout(`${JSON.stringify(output, null, 2)}\\n`);\n\t\treturn { exitCode: 0 };\n\t} catch (error) {\n\t\tconst code = isFileSystemError(error)\n\t\t\t? \"local_input_error\"\n\t\t\t: \"invalid_usage\";\n\t\tconst message = error instanceof Error ? error.message : \"Dry-run failed.\";\n\t\treturn writeError(deps, code, message);\n\t}\n}\n\nconst MAX_BUNDLE_FILE_COUNT = 200;\n\nfunction formatUpdateDryRun(\n\ttarget: string,\n\tprepared: PreparedResult,\n): Record<string, unknown> {\n\tconst totalBytes = prepared.manifest.files.reduce(\n\t\t(sum, f) => sum + f.sizeBytes,\n\t\t0,\n\t);\n\treturn {\n\t\tdryRun: true,\n\t\tkind: \"staged\",\n\t\ttarget,\n\t\tmanifest: {\n\t\t\tfiles: prepared.manifest.files,\n\t\t\tentry: prepared.manifest.entry ?? null,\n\t\t},\n\t\toptions: prepared.options,\n\t\t...(prepared.metadata ? { metadata: prepared.metadata } : {}),\n\t\ttotalBytes,\n\t};\n}\n\nfunction validateDryRunFileCount(output: Record<string, unknown>): void {\n\tif (output.kind !== \"staged\") return;\n\tconst manifest = output.manifest as { files: ManifestFile[] };\n\tif (manifest.files.length > MAX_BUNDLE_FILE_COUNT) {\n\t\tthrow Object.assign(\n\t\t\tnew Error(\n\t\t\t\t`Bundle contains ${manifest.files.length} files, exceeding the maximum of ${MAX_BUNDLE_FILE_COUNT}.`,\n\t\t\t),\n\t\t\t{ code: \"ELIMIT\" },\n\t\t);\n\t}\n}\n\nfunction isFileSystemError(error: unknown): boolean {\n\tif (!(error instanceof Error)) return false;\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction withUpdateIdempotency(options: UpdateOptions): UpdateOptions {\n\treturn options.idempotencyKey\n\t\t? options\n\t\t: { ...options, idempotencyKey: `cli_upd_${randomUUID()}` };\n}\n\nfunction assertDropId(target: string): void {\n\tif (!target.startsWith(\"drop_\")) {\n\t\tthrow new Error(\n\t\t\t\"Update target must be a drop id returned by --json output, for example drop_...\",\n\t\t);\n\t}\n}\n","import { maskKey, resolveCredential } from \"../auth.js\";\nimport { writeHumanOrJson, writeKv } from \"../fmt.js\";\nimport type { CredentialStore } from \"../storage.js\";\n\nexport async function runWhoami(\n\t_input: { json?: boolean },\n\tdeps: {\n\t\tstore: CredentialStore;\n\t\tenv: Record<string, string | undefined>;\n\t\tstdout: (value: string) => void;\n\t\tstderr: (value: string) => void;\n\t\toutputMode?: \"human\" | \"json\";\n\t},\n): Promise<{ exitCode: number }> {\n\tconst credential = await resolveCredential({\n\t\tenv: deps.env,\n\t\tstore: deps.store,\n\t});\n\tif (!credential) {\n\t\twriteHumanOrJson(deps, \"Not authenticated. Run dropthis login.\", {\n\t\t\tok: true,\n\t\t\tauthenticated: false,\n\t\t});\n\t\treturn { exitCode: 0 };\n\t}\n\tconst masked = maskKey(credential.apiKey);\n\tconst pairs: Array<[string, string]> = [];\n\tif (credential.email) pairs.push([\"Email\", credential.email]);\n\tpairs.push([\"Key\", masked]);\n\tpairs.push([\"Source\", credential.source]);\n\tif (credential.accountId) pairs.push([\"Account\", credential.accountId]);\n\n\tconst jsonEnvelope = {\n\t\tok: true,\n\t\tauthenticated: true,\n\t\tsource: credential.source,\n\t\tmasked_key: masked,\n\t\t...(credential.keyId ? { key_id: credential.keyId } : {}),\n\t\t...(credential.keyLast4 ? { key_last4: credential.keyLast4 } : {}),\n\t\t...(credential.accountId ? { account_id: credential.accountId } : {}),\n\t\t...(credential.email ? { email: credential.email } : {}),\n\t};\n\twriteKv(deps, pairs, jsonEnvelope);\n\treturn { exitCode: 0 };\n}\n","import { Dropthis } from \"@dropthis/node\";\nimport { createOutput, type Output } from \"./output.js\";\n\nexport type GlobalOptions = {\n\tapiKey?: string;\n\tapiUrl?: string;\n\tjson?: boolean;\n\tquiet?: boolean;\n};\n\nexport type CliContext = {\n\tenv: Record<string, string | undefined>;\n\tglobal: GlobalOptions;\n\toutput: Output;\n\tstdout: (value: string) => void;\n\tstderr: (value: string) => void;\n\tcreateClient: (apiKey?: string) => Dropthis;\n};\n\nexport function createContext(input: {\n\tglobal?: GlobalOptions;\n\tenv?: Record<string, string | undefined>;\n\tstdout?: (value: string) => void;\n\tstderr?: (value: string) => void;\n\tstdoutIsTTY?: boolean;\n}): CliContext {\n\tconst env = input.env ?? process.env;\n\tconst global = input.global ?? {};\n\treturn {\n\t\tenv,\n\t\tglobal,\n\t\toutput: createOutput({\n\t\t\t...(global.json !== undefined ? { json: global.json } : {}),\n\t\t\t...(global.quiet !== undefined ? { quiet: global.quiet } : {}),\n\t\t\tstdoutIsTTY: input.stdoutIsTTY ?? process.stdout.isTTY === true,\n\t\t\tenv,\n\t\t}),\n\t\tstdout: input.stdout ?? ((value) => process.stdout.write(value)),\n\t\tstderr: input.stderr ?? ((value) => process.stderr.write(value)),\n\t\tcreateClient(apiKey) {\n\t\t\tconst baseUrl = global.apiUrl ?? env.DROPTHIS_API_URL;\n\t\t\treturn new Dropthis({\n\t\t\t\t...(apiKey ? { apiKey } : {}),\n\t\t\t\t...(baseUrl ? { baseUrl } : {}),\n\t\t\t});\n\t\t},\n\t};\n}\n","import { chmod, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { Entry } from \"@napi-rs/keyring\";\n\nexport type StoredCredential = {\n\tapiKey: string;\n\tkeyId?: string;\n\tkeyLast4?: string;\n\taccountId?: string;\n\temail?: string;\n\tstorage: \"secure\" | \"insecure\";\n};\n\nexport interface CredentialStore {\n\tread(): Promise<StoredCredential | null>;\n\tsave(credential: StoredCredential): Promise<void>;\n\tclear(): Promise<void>;\n}\n\nexport type KeyringAdapter = {\n\tgetPassword(): string | null | undefined | Promise<string | null | undefined>;\n\tsetPassword(value: string): void | Promise<void>;\n\tdeletePassword(): void | Promise<void>;\n};\n\nexport class MemoryCredentialStore implements CredentialStore {\n\tprivate credential: StoredCredential | null = null;\n\n\tasync read(): Promise<StoredCredential | null> {\n\t\treturn this.credential;\n\t}\n\n\tasync save(credential: StoredCredential): Promise<void> {\n\t\tthis.credential = credential;\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tthis.credential = null;\n\t}\n}\n\nexport class InsecureFileCredentialStore implements CredentialStore {\n\tprivate readonly filePath: string;\n\n\tconstructor(options: { configDir?: string } = {}) {\n\t\tthis.filePath = credentialPath(options.configDir);\n\t}\n\n\tasync read(): Promise<StoredCredential | null> {\n\t\tconst value = await readJsonFile(this.filePath);\n\t\tif (!value) return null;\n\t\tif (typeof value.apiKey !== \"string\" || !value.apiKey) return null;\n\t\treturn { ...value, storage: \"insecure\" } as StoredCredential;\n\t}\n\n\tasync save(credential: StoredCredential): Promise<void> {\n\t\tawait writeCredentialFile(this.filePath, {\n\t\t\t...credential,\n\t\t\tstorage: \"insecure\",\n\t\t});\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tawait rm(this.filePath, { force: true });\n\t}\n}\n\nexport class KeyringCredentialStore implements CredentialStore {\n\tprivate readonly filePath: string;\n\tprivate readonly keyring: KeyringAdapter;\n\n\tconstructor(options: { configDir?: string; keyring?: KeyringAdapter } = {}) {\n\t\tthis.filePath = credentialPath(options.configDir);\n\t\tthis.keyring = options.keyring ?? defaultKeyringAdapter();\n\t}\n\n\tasync read(): Promise<StoredCredential | null> {\n\t\tconst metadata = await readJsonFile(this.filePath);\n\t\tif (!metadata) return null;\n\t\tconst apiKey = await this.keyring.getPassword();\n\t\tif (typeof apiKey !== \"string\" || !apiKey) return null;\n\t\treturn { ...metadata, apiKey, storage: \"secure\" } as StoredCredential;\n\t}\n\n\tasync save(credential: StoredCredential): Promise<void> {\n\t\tawait this.keyring.setPassword(credential.apiKey);\n\t\tconst { apiKey: _apiKey, ...metadata } = credential;\n\t\tawait writeCredentialFile(this.filePath, {\n\t\t\t...metadata,\n\t\t\tstorage: \"secure\",\n\t\t});\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tawait this.keyring.deletePassword();\n\t\tawait rm(this.filePath, { force: true });\n\t}\n}\n\nexport function createCredentialStore(\n\toptions: { insecure?: boolean; configDir?: string } = {},\n): CredentialStore {\n\tif (options.insecure) return new InsecureFileCredentialStore(options);\n\treturn new KeyringCredentialStore(options);\n}\n\nfunction defaultKeyringAdapter(): KeyringAdapter {\n\tconst entry = new Entry(\"dropthis\", \"default\");\n\treturn {\n\t\tgetPassword: () => entry.getPassword(),\n\t\tsetPassword: (value) => entry.setPassword(value),\n\t\tdeletePassword: () => {\n\t\t\tentry.deletePassword();\n\t\t},\n\t};\n}\n\nfunction credentialPath(configDir?: string): string {\n\treturn join(\n\t\tconfigDir ?? join(homedir(), \".config\", \"dropthis\"),\n\t\t\"credentials.json\",\n\t);\n}\n\nasync function readJsonFile(\n\tpath: string,\n): Promise<Record<string, unknown> | null> {\n\ttry {\n\t\treturn JSON.parse(await readFile(path, \"utf8\")) as Record<string, unknown>;\n\t} catch (error) {\n\t\tif (\n\t\t\terror &&\n\t\t\ttypeof error === \"object\" &&\n\t\t\t\"code\" in error &&\n\t\t\terror.code === \"ENOENT\"\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nasync function writeCredentialFile(\n\tpath: string,\n\tcredential: Record<string, unknown>,\n): Promise<void> {\n\tawait mkdir(dirname(path), { recursive: true });\n\tawait writeFile(path, `${JSON.stringify(credential, null, 2)}\\n`, {\n\t\tmode: 0o600,\n\t});\n\tawait chmod(path, 0o600);\n}\n","#!/usr/bin/env node\nimport { buildProgram } from \"./program.js\";\nimport { createCredentialStore } from \"./storage.js\";\n\nbuildProgram({ store: createCredentialStore() })\n\t.parseAsync(process.argv)\n\t.catch((error: unknown) => {\n\t\tconsole.error(error);\n\t\tprocess.exitCode = 1;\n\t});\n"],"mappings":"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","names":["import_picocolors","error","pc","pc","pc","hasCredential","prompts","hasCredential","listItems","error","prompts","import_promises","import_picocolors","pc","import_promises","error","error","import_node_crypto","error","isFileSystemError","MAX_BUNDLE_FILE_COUNT","import_promises","import_node_path","error","pc","deps","global","result","writeFile","join","error"]}
|