@dropthis/cli 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +115 -89
- package/dist/cli.cjs.map +1 -1
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -25,6 +25,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
25
25
|
|
|
26
26
|
// src/program.ts
|
|
27
27
|
var import_commander = require("commander");
|
|
28
|
+
var import_picocolors3 = __toESM(require("picocolors"), 1);
|
|
28
29
|
|
|
29
30
|
// src/auth.ts
|
|
30
31
|
async function resolveCredential(input) {
|
|
@@ -489,13 +490,13 @@ async function runDoctor(_input, deps) {
|
|
|
489
490
|
const authSource = credential?.source ?? "missing";
|
|
490
491
|
const storageBackend = stored?.storage ?? "none";
|
|
491
492
|
const pairs = [
|
|
492
|
-
["Version", "0.2.
|
|
493
|
+
["Version", "0.2.2"],
|
|
493
494
|
["Auth", authSource],
|
|
494
495
|
["Storage", storageBackend]
|
|
495
496
|
];
|
|
496
497
|
writeKv(deps, pairs, {
|
|
497
498
|
ok: true,
|
|
498
|
-
version: "0.2.
|
|
499
|
+
version: "0.2.2",
|
|
499
500
|
auth: { source: authSource },
|
|
500
501
|
storage: { backend: storageBackend }
|
|
501
502
|
});
|
|
@@ -1351,84 +1352,36 @@ async function writeCredentialFile(path, credential) {
|
|
|
1351
1352
|
function buildProgram(options = {}) {
|
|
1352
1353
|
const program = new import_commander.Command();
|
|
1353
1354
|
const store = options.store ?? new MemoryCredentialStore();
|
|
1354
|
-
program.name("dropthis").description(
|
|
1355
|
+
program.name("dropthis").description(
|
|
1356
|
+
[
|
|
1357
|
+
import_picocolors3.default.dim("Publish anything online and get a URL back."),
|
|
1358
|
+
"",
|
|
1359
|
+
`${import_picocolors3.default.bold("Quick start:")}`,
|
|
1360
|
+
` ${import_picocolors3.default.cyan("dropthis login")}`,
|
|
1361
|
+
` ${import_picocolors3.default.cyan("dropthis publish ./dist")}`
|
|
1362
|
+
].join("\n")
|
|
1363
|
+
).version("0.2.2").configureHelp({
|
|
1364
|
+
subcommandTerm(cmd) {
|
|
1365
|
+
const args = cmd.registeredArguments.map((a) => {
|
|
1366
|
+
const name = a.name();
|
|
1367
|
+
const variadic = a.variadic ? "..." : "";
|
|
1368
|
+
return a.required ? `<${name}${variadic}>` : `[${name}${variadic}]`;
|
|
1369
|
+
}).join(" ");
|
|
1370
|
+
return args ? `${cmd.name()} ${args}` : cmd.name();
|
|
1371
|
+
},
|
|
1372
|
+
styleTitle: (title) => import_picocolors3.default.bold(title),
|
|
1373
|
+
styleCommandText: (str) => import_picocolors3.default.cyan(str),
|
|
1374
|
+
styleSubcommandText: (str) => import_picocolors3.default.cyan(str),
|
|
1375
|
+
styleOptionText: (str) => import_picocolors3.default.yellow(str)
|
|
1376
|
+
}).addHelpText(
|
|
1377
|
+
"after",
|
|
1378
|
+
`
|
|
1379
|
+
${import_picocolors3.default.dim("Docs:")} ${import_picocolors3.default.cyan("https://dropthis.dev/docs/cli")}`
|
|
1380
|
+
);
|
|
1355
1381
|
program.option("--api-key <key>", "Override API key for this invocation");
|
|
1356
1382
|
program.option("--api-url <url>", "Override API base URL");
|
|
1357
1383
|
program.option("--json", "Force JSON output");
|
|
1358
1384
|
program.option("-q, --quiet", "Suppress status output and imply JSON");
|
|
1359
|
-
program.command("login").description("Authenticate with email OTP").option("--email <email>", "Email address").option("--otp <otp>", "One-time passcode").option("--json", "Force JSON output").action(
|
|
1360
|
-
async (commandOptions) => {
|
|
1361
|
-
if (!commandOptions.email || !commandOptions.otp) {
|
|
1362
|
-
const deps2 = await commandDeps(program, options, store, commandOptions);
|
|
1363
|
-
const global2 = globalOptions(program, commandOptions);
|
|
1364
|
-
const context = createContext({ global: global2 });
|
|
1365
|
-
const result2 = await runLoginInteractive({
|
|
1366
|
-
...deps2,
|
|
1367
|
-
createClient: (apiKey) => context.createClient(apiKey)
|
|
1368
|
-
});
|
|
1369
|
-
process.exitCode = result2.exitCode;
|
|
1370
|
-
return;
|
|
1371
|
-
}
|
|
1372
|
-
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1373
|
-
const global = globalOptions(program, commandOptions);
|
|
1374
|
-
const verifyContext = createContext({ global });
|
|
1375
|
-
const result = await runLoginVerify(
|
|
1376
|
-
{
|
|
1377
|
-
email: commandOptions.email,
|
|
1378
|
-
otp: commandOptions.otp,
|
|
1379
|
-
...commandOptions.json !== void 0 ? { json: commandOptions.json } : {}
|
|
1380
|
-
},
|
|
1381
|
-
{
|
|
1382
|
-
...deps,
|
|
1383
|
-
createClient: (apiKey) => verifyContext.createClient(apiKey)
|
|
1384
|
-
}
|
|
1385
|
-
);
|
|
1386
|
-
process.exitCode = result.exitCode;
|
|
1387
|
-
}
|
|
1388
|
-
);
|
|
1389
|
-
const login = program.commands.find((command) => command.name() === "login");
|
|
1390
|
-
login?.command("request").description("Request an email OTP").requiredOption("--email <email>", "Email address").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1391
|
-
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1392
|
-
const result = await runLoginRequest(commandOptions, deps);
|
|
1393
|
-
process.exitCode = result.exitCode;
|
|
1394
|
-
});
|
|
1395
|
-
login?.command("verify").description("Verify email OTP and store an API key").requiredOption("--email <email>", "Email address").requiredOption("--otp <otp>", "One-time passcode").option("--json", "Force JSON output").action(
|
|
1396
|
-
async (commandOptions) => {
|
|
1397
|
-
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1398
|
-
const global = globalOptions(program, commandOptions);
|
|
1399
|
-
const verifySubContext = createContext({ global });
|
|
1400
|
-
const result = await runLoginVerify(commandOptions, {
|
|
1401
|
-
...deps,
|
|
1402
|
-
createClient: (apiKey) => verifySubContext.createClient(apiKey)
|
|
1403
|
-
});
|
|
1404
|
-
process.exitCode = result.exitCode;
|
|
1405
|
-
}
|
|
1406
|
-
);
|
|
1407
|
-
program.command("logout").description("Remove stored credentials").option("--revoke", "Best-effort revoke the saved API key").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1408
|
-
const deps = await commandDeps(
|
|
1409
|
-
program,
|
|
1410
|
-
options,
|
|
1411
|
-
store,
|
|
1412
|
-
commandOptions
|
|
1413
|
-
);
|
|
1414
|
-
const result = await runLogout(commandOptions, deps);
|
|
1415
|
-
process.exitCode = result.exitCode;
|
|
1416
|
-
});
|
|
1417
|
-
program.command("whoami").description("Show current authentication status").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1418
|
-
const deps = await commandDeps(
|
|
1419
|
-
program,
|
|
1420
|
-
options,
|
|
1421
|
-
store,
|
|
1422
|
-
commandOptions
|
|
1423
|
-
);
|
|
1424
|
-
const result = await runWhoami(commandOptions, deps);
|
|
1425
|
-
process.exitCode = result.exitCode;
|
|
1426
|
-
});
|
|
1427
|
-
program.command("account").description("Account commands").command("get").description("Get account details").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1428
|
-
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1429
|
-
const result = await runAccountGet(commandOptions, deps);
|
|
1430
|
-
process.exitCode = result.exitCode;
|
|
1431
|
-
});
|
|
1432
1385
|
program.command("publish [input...]").description(
|
|
1433
1386
|
"Publish files, folders, URLs, strings, or stdin.\nMultiple files are bundled into one drop.\nUse - to read stdin explicitly, or pipe without args."
|
|
1434
1387
|
).option("--from-json <path>", "Read exact POST /drops JSON request body").option("--json", "Force JSON output").option("--title <title>", "Drop title").option("--visibility <visibility>", "Drop visibility").option("--password <password>", "Set password").option("--no-password", "Clear password").option("--noindex", "Prevent indexing").option("--index", "Allow indexing").option("--expires-at <datetime>", "Expiration datetime").option("--metadata <json>", "Metadata JSON object").option("--metadata-file <path>", "Metadata JSON file").option("--entry <path>", "Entry file path").option("--content-type <mime>", "Content type").option("--path <path>", "Path for stdin or byte input").option("--idempotency-key <key>", "Idempotency key").option("--url", "Print only the published URL").option("--dry-run", "Validate without publishing").action(async (inputs, commandOptions) => {
|
|
@@ -1451,7 +1404,7 @@ function buildProgram(options = {}) {
|
|
|
1451
1404
|
);
|
|
1452
1405
|
process.exitCode = result.exitCode;
|
|
1453
1406
|
});
|
|
1454
|
-
program.command("update <target> [input]").description("
|
|
1407
|
+
program.command("update <target> [input]").description("Deploy new content to an existing drop").option("--json", "Force JSON output").option("--slug <slug>", "Replace shared hosted drop slug").option("--title <title>", "Drop title").option("--visibility <visibility>", "Drop visibility").option("--password <password>", "Set password").option("--no-password", "Clear password").option("--noindex", "Prevent indexing").option("--index", "Allow indexing").option("--expires-at <datetime>", "Expiration datetime").option("--metadata <json>", "Metadata JSON object").option("--metadata-file <path>", "Metadata JSON file").option("--entry <path>", "Entry file path").option("--content-type <mime>", "Content type").option("--path <path>", "Path for stdin or byte input").option("--idempotency-key <key>", "Idempotency key").option("--if-revision <n>", "Expected current revision", parseInteger).option(
|
|
1455
1408
|
"--from-json <path>",
|
|
1456
1409
|
"Read exact POST /drops/{drop_id}/deployments JSON request body"
|
|
1457
1410
|
).option("--url", "Print only the published URL").option("--dry-run", "Validate without publishing").action(
|
|
@@ -1467,20 +1420,20 @@ function buildProgram(options = {}) {
|
|
|
1467
1420
|
process.exitCode = result.exitCode;
|
|
1468
1421
|
}
|
|
1469
1422
|
);
|
|
1470
|
-
const drops = program.command("drops").description("
|
|
1471
|
-
drops.command("list").option("--limit <n>", "Page size", parseInteger).option("--cursor <cursor>", "Pagination cursor").option("--json", "Force JSON output").action(
|
|
1423
|
+
const drops = program.command("drops").description("Manage published drops");
|
|
1424
|
+
drops.command("list").description("List your drops").option("--limit <n>", "Page size", parseInteger).option("--cursor <cursor>", "Pagination cursor").option("--json", "Force JSON output").action(
|
|
1472
1425
|
async (commandOptions) => {
|
|
1473
1426
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1474
1427
|
const result = await runDropsList(commandOptions, deps);
|
|
1475
1428
|
process.exitCode = result.exitCode;
|
|
1476
1429
|
}
|
|
1477
1430
|
);
|
|
1478
|
-
drops.command("get <dropId>").option("--json", "Force JSON output").action(async (dropId, commandOptions) => {
|
|
1431
|
+
drops.command("get <dropId>").description("Show drop details").option("--json", "Force JSON output").action(async (dropId, commandOptions) => {
|
|
1479
1432
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1480
1433
|
const result = await runDropsGet(dropId, commandOptions, deps);
|
|
1481
1434
|
process.exitCode = result.exitCode;
|
|
1482
1435
|
});
|
|
1483
|
-
drops.command("update <dropId>").option("--json", "Force JSON output").option("--title <title>", "Drop title").option("--visibility <visibility>", "Drop visibility").option("--password <password>", "Set password").option("--no-password", "Clear password").option("--noindex", "Prevent indexing").option("--index", "Allow indexing").option("--expires-at <datetime>", "Expiration datetime").option("--metadata <json>", "Metadata JSON object").option("--metadata-file <path>", "Metadata JSON file").action(async (dropId, commandOptions) => {
|
|
1436
|
+
drops.command("update <dropId>").description("Update drop metadata").option("--json", "Force JSON output").option("--title <title>", "Drop title").option("--visibility <visibility>", "Drop visibility").option("--password <password>", "Set password").option("--no-password", "Clear password").option("--noindex", "Prevent indexing").option("--index", "Allow indexing").option("--expires-at <datetime>", "Expiration datetime").option("--metadata <json>", "Metadata JSON object").option("--metadata-file <path>", "Metadata JSON file").action(async (dropId, commandOptions) => {
|
|
1484
1437
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1485
1438
|
const result = await runDropsUpdate(
|
|
1486
1439
|
dropId,
|
|
@@ -1489,7 +1442,7 @@ function buildProgram(options = {}) {
|
|
|
1489
1442
|
);
|
|
1490
1443
|
process.exitCode = result.exitCode;
|
|
1491
1444
|
});
|
|
1492
|
-
drops.command("delete <dropId>").option("--yes", "Confirm deletion").option("--json", "Force JSON output").action(
|
|
1445
|
+
drops.command("delete <dropId>").description("Delete a drop").option("--yes", "Confirm deletion").option("--json", "Force JSON output").action(
|
|
1493
1446
|
async (dropId, commandOptions) => {
|
|
1494
1447
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1495
1448
|
const result = await runDropsDelete(
|
|
@@ -1500,18 +1453,18 @@ function buildProgram(options = {}) {
|
|
|
1500
1453
|
process.exitCode = result.exitCode;
|
|
1501
1454
|
}
|
|
1502
1455
|
);
|
|
1503
|
-
const apiKeys = program.command("api-keys").description("API
|
|
1504
|
-
apiKeys.command("create").option("--label <label>", "API key label", "CLI").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1456
|
+
const apiKeys = program.command("api-keys").description("Manage API keys");
|
|
1457
|
+
apiKeys.command("create").description("Create an API key").option("--label <label>", "API key label", "CLI").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1505
1458
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1506
1459
|
const result = await runApiKeysCreate(commandOptions, deps);
|
|
1507
1460
|
process.exitCode = result.exitCode;
|
|
1508
1461
|
});
|
|
1509
|
-
apiKeys.command("list").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1462
|
+
apiKeys.command("list").description("List API keys").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1510
1463
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1511
1464
|
const result = await runApiKeysList(commandOptions, deps);
|
|
1512
1465
|
process.exitCode = result.exitCode;
|
|
1513
1466
|
});
|
|
1514
|
-
apiKeys.command("delete <keyId>").option("--yes", "Confirm deletion").option("--json", "Force JSON output").action(
|
|
1467
|
+
apiKeys.command("delete <keyId>").description("Delete an API key").option("--yes", "Confirm deletion").option("--json", "Force JSON output").action(
|
|
1515
1468
|
async (keyId, commandOptions) => {
|
|
1516
1469
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1517
1470
|
const result = await runApiKeysDelete(
|
|
@@ -1522,15 +1475,15 @@ function buildProgram(options = {}) {
|
|
|
1522
1475
|
process.exitCode = result.exitCode;
|
|
1523
1476
|
}
|
|
1524
1477
|
);
|
|
1525
|
-
const deployments = program.command("deployments").description("
|
|
1526
|
-
deployments.command("list <dropId>").option("--limit <n>", "Page size", parseInteger).option("--cursor <cursor>", "Pagination cursor").option("--json", "Force JSON output").action(
|
|
1478
|
+
const deployments = program.command("deployments").description("View deployment history");
|
|
1479
|
+
deployments.command("list <dropId>").description("List deployments for a drop").option("--limit <n>", "Page size", parseInteger).option("--cursor <cursor>", "Pagination cursor").option("--json", "Force JSON output").action(
|
|
1527
1480
|
async (dropId, commandOptions) => {
|
|
1528
1481
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1529
1482
|
const result = await runDeploymentsList(dropId, commandOptions, deps);
|
|
1530
1483
|
process.exitCode = result.exitCode;
|
|
1531
1484
|
}
|
|
1532
1485
|
);
|
|
1533
|
-
deployments.command("get <dropId> <deploymentId>").option("--json", "Force JSON output").action(
|
|
1486
|
+
deployments.command("get <dropId> <deploymentId>").description("Show deployment details").option("--json", "Force JSON output").action(
|
|
1534
1487
|
async (dropId, deploymentId, commandOptions) => {
|
|
1535
1488
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1536
1489
|
const result = await runDeploymentsGet(
|
|
@@ -1542,6 +1495,79 @@ function buildProgram(options = {}) {
|
|
|
1542
1495
|
process.exitCode = result.exitCode;
|
|
1543
1496
|
}
|
|
1544
1497
|
);
|
|
1498
|
+
program.command("login").description("Authenticate with email OTP").option("--email <email>", "Email address").option("--otp <otp>", "One-time passcode").option("--json", "Force JSON output").action(
|
|
1499
|
+
async (commandOptions) => {
|
|
1500
|
+
if (!commandOptions.email || !commandOptions.otp) {
|
|
1501
|
+
const deps2 = await commandDeps(program, options, store, commandOptions);
|
|
1502
|
+
const global2 = globalOptions(program, commandOptions);
|
|
1503
|
+
const context = createContext({ global: global2 });
|
|
1504
|
+
const result2 = await runLoginInteractive({
|
|
1505
|
+
...deps2,
|
|
1506
|
+
createClient: (apiKey) => context.createClient(apiKey)
|
|
1507
|
+
});
|
|
1508
|
+
process.exitCode = result2.exitCode;
|
|
1509
|
+
return;
|
|
1510
|
+
}
|
|
1511
|
+
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1512
|
+
const global = globalOptions(program, commandOptions);
|
|
1513
|
+
const verifyContext = createContext({ global });
|
|
1514
|
+
const result = await runLoginVerify(
|
|
1515
|
+
{
|
|
1516
|
+
email: commandOptions.email,
|
|
1517
|
+
otp: commandOptions.otp,
|
|
1518
|
+
...commandOptions.json !== void 0 ? { json: commandOptions.json } : {}
|
|
1519
|
+
},
|
|
1520
|
+
{
|
|
1521
|
+
...deps,
|
|
1522
|
+
createClient: (apiKey) => verifyContext.createClient(apiKey)
|
|
1523
|
+
}
|
|
1524
|
+
);
|
|
1525
|
+
process.exitCode = result.exitCode;
|
|
1526
|
+
}
|
|
1527
|
+
);
|
|
1528
|
+
const login = program.commands.find((command) => command.name() === "login");
|
|
1529
|
+
login?.command("request").description("Request an email OTP").requiredOption("--email <email>", "Email address").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1530
|
+
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1531
|
+
const result = await runLoginRequest(commandOptions, deps);
|
|
1532
|
+
process.exitCode = result.exitCode;
|
|
1533
|
+
});
|
|
1534
|
+
login?.command("verify").description("Verify email OTP and store an API key").requiredOption("--email <email>", "Email address").requiredOption("--otp <otp>", "One-time passcode").option("--json", "Force JSON output").action(
|
|
1535
|
+
async (commandOptions) => {
|
|
1536
|
+
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1537
|
+
const global = globalOptions(program, commandOptions);
|
|
1538
|
+
const verifySubContext = createContext({ global });
|
|
1539
|
+
const result = await runLoginVerify(commandOptions, {
|
|
1540
|
+
...deps,
|
|
1541
|
+
createClient: (apiKey) => verifySubContext.createClient(apiKey)
|
|
1542
|
+
});
|
|
1543
|
+
process.exitCode = result.exitCode;
|
|
1544
|
+
}
|
|
1545
|
+
);
|
|
1546
|
+
program.command("logout").description("Remove stored credentials").option("--revoke", "Best-effort revoke the saved API key").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1547
|
+
const deps = await commandDeps(
|
|
1548
|
+
program,
|
|
1549
|
+
options,
|
|
1550
|
+
store,
|
|
1551
|
+
commandOptions
|
|
1552
|
+
);
|
|
1553
|
+
const result = await runLogout(commandOptions, deps);
|
|
1554
|
+
process.exitCode = result.exitCode;
|
|
1555
|
+
});
|
|
1556
|
+
program.command("whoami").description("Show current authentication status").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1557
|
+
const deps = await commandDeps(
|
|
1558
|
+
program,
|
|
1559
|
+
options,
|
|
1560
|
+
store,
|
|
1561
|
+
commandOptions
|
|
1562
|
+
);
|
|
1563
|
+
const result = await runWhoami(commandOptions, deps);
|
|
1564
|
+
process.exitCode = result.exitCode;
|
|
1565
|
+
});
|
|
1566
|
+
program.command("account").description("Show account details").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1567
|
+
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1568
|
+
const result = await runAccountGet(commandOptions, deps);
|
|
1569
|
+
process.exitCode = result.exitCode;
|
|
1570
|
+
});
|
|
1545
1571
|
program.command("doctor").description("Report CLI diagnostics").option("--json", "Force JSON output").action(async (commandOptions) => {
|
|
1546
1572
|
const deps = await commandDeps(
|
|
1547
1573
|
program,
|
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 { 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(\"Publish anything online and get a URL back.\")\n\t\t.version(PKG_VERSION);\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(\"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(\"Account commands\")\n\t\t.command(\"get\")\n\t\t.description(\"Get 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\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(\"Update an existing drop by id\")\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(\"Drop resource commands\");\n\tdrops\n\t\t.command(\"list\")\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.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.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.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(\"API key commands\");\n\tapiKeys\n\t\t.command(\"create\")\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.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.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(\"Deployment commands\");\n\tdeployments\n\t\t.command(\"list <dropId>\")\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.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\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(\"Published\");\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(finalMessage?: string): 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(finalMessage?: string) {\n\t\t\tclearInterval(timer);\n\t\t\tconst text = finalMessage ?? message;\n\t\t\tstderr(`\\r\\x1B[2K${pc.green(symbols.success)} ${text}\\n`);\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(\"Updated\");\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":["error","pc","pc","pc","hasCredential","prompts","hasCredential","listItems","error","prompts","import_promises","import_picocolors","pc","text","import_promises","error","error","import_node_crypto","error","isFileSystemError","MAX_BUNDLE_FILE_COUNT","import_promises","import_node_path","error","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 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\t\t.addHelpText(\n\t\t\t\"after\",\n\t\t\t`\\n${pc.dim(\"Docs:\")} ${pc.cyan(\"https://dropthis.dev/docs/cli\")}`,\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(\"Published\");\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(finalMessage?: string): 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(finalMessage?: string) {\n\t\t\tclearInterval(timer);\n\t\t\tconst text = finalMessage ?? message;\n\t\t\tstderr(`\\r\\x1B[2K${pc.green(symbols.success)} ${text}\\n`);\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(\"Updated\");\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","text","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"]}
|