@dropthis/cli 0.2.0 → 0.2.1
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 +93 -35
- package/dist/cli.cjs.map +1 -1
- package/package.json +1 -3
package/dist/cli.cjs
CHANGED
|
@@ -226,7 +226,11 @@ function writeEmpty(deps, message, json) {
|
|
|
226
226
|
|
|
227
227
|
// src/commands/account.ts
|
|
228
228
|
async function runAccountGet(_input, deps) {
|
|
229
|
-
if (await resolveCredential({
|
|
229
|
+
if (await resolveCredential({
|
|
230
|
+
...deps.apiKey ? { apiKey: deps.apiKey } : {},
|
|
231
|
+
env: deps.env,
|
|
232
|
+
store: deps.store
|
|
233
|
+
}) === null) {
|
|
230
234
|
return writeAuthError(deps);
|
|
231
235
|
}
|
|
232
236
|
const result = await deps.client.account.get();
|
|
@@ -243,6 +247,7 @@ async function runAccountGet(_input, deps) {
|
|
|
243
247
|
}
|
|
244
248
|
|
|
245
249
|
// src/commands/api-keys.ts
|
|
250
|
+
var prompts = __toESM(require("@clack/prompts"), 1);
|
|
246
251
|
async function runApiKeysCreate(input, deps) {
|
|
247
252
|
if (!await hasCredential(deps)) return writeAuthError(deps);
|
|
248
253
|
const result = await deps.client.apiKeys.create({ label: input.label });
|
|
@@ -285,6 +290,14 @@ async function runApiKeysDelete(keyId, input, deps) {
|
|
|
285
290
|
"Pass --yes to delete in non-interactive mode."
|
|
286
291
|
);
|
|
287
292
|
}
|
|
293
|
+
if (!input.yes && input.interactive !== false) {
|
|
294
|
+
const confirmed = await prompts.confirm({
|
|
295
|
+
message: `Delete API key ${keyId}?`
|
|
296
|
+
});
|
|
297
|
+
if (prompts.isCancel(confirmed) || !confirmed) {
|
|
298
|
+
return { exitCode: 0 };
|
|
299
|
+
}
|
|
300
|
+
}
|
|
288
301
|
if (!await hasCredential(deps)) return writeAuthError(deps);
|
|
289
302
|
const result = await deps.client.apiKeys.delete(keyId);
|
|
290
303
|
if (result?.error) return writeApiErrorSimple(deps, result.error.message);
|
|
@@ -296,7 +309,11 @@ async function runApiKeysDelete(keyId, input, deps) {
|
|
|
296
309
|
return { exitCode: 0 };
|
|
297
310
|
}
|
|
298
311
|
async function hasCredential(deps) {
|
|
299
|
-
return await resolveCredential({
|
|
312
|
+
return await resolveCredential({
|
|
313
|
+
...deps.apiKey ? { apiKey: deps.apiKey } : {},
|
|
314
|
+
env: deps.env,
|
|
315
|
+
store: deps.store
|
|
316
|
+
}) !== null;
|
|
300
317
|
}
|
|
301
318
|
function listItems(data) {
|
|
302
319
|
if (data && typeof data === "object" && "data" in data) {
|
|
@@ -472,19 +489,22 @@ async function runDoctor(_input, deps) {
|
|
|
472
489
|
const authSource = credential?.source ?? "missing";
|
|
473
490
|
const storageBackend = stored?.storage ?? "none";
|
|
474
491
|
const pairs = [
|
|
475
|
-
["Version", "0.1
|
|
492
|
+
["Version", "0.2.1"],
|
|
476
493
|
["Auth", authSource],
|
|
477
494
|
["Storage", storageBackend]
|
|
478
495
|
];
|
|
479
496
|
writeKv(deps, pairs, {
|
|
480
497
|
ok: true,
|
|
481
|
-
version: "0.1
|
|
498
|
+
version: "0.2.1",
|
|
482
499
|
auth: { source: authSource },
|
|
483
500
|
storage: { backend: storageBackend }
|
|
484
501
|
});
|
|
485
502
|
return { exitCode: 0 };
|
|
486
503
|
}
|
|
487
504
|
|
|
505
|
+
// src/commands/drops.ts
|
|
506
|
+
var prompts2 = __toESM(require("@clack/prompts"), 1);
|
|
507
|
+
|
|
488
508
|
// src/options.ts
|
|
489
509
|
var import_promises = require("fs/promises");
|
|
490
510
|
async function parseDropOptions(raw) {
|
|
@@ -595,6 +615,14 @@ async function runDropsDelete(dropId, input, deps) {
|
|
|
595
615
|
"Pass --yes to delete in non-interactive mode."
|
|
596
616
|
);
|
|
597
617
|
}
|
|
618
|
+
if (!input.yes && input.interactive !== false) {
|
|
619
|
+
const confirmed = await prompts2.confirm({
|
|
620
|
+
message: `Delete ${dropId}?`
|
|
621
|
+
});
|
|
622
|
+
if (prompts2.isCancel(confirmed) || !confirmed) {
|
|
623
|
+
return { exitCode: 0 };
|
|
624
|
+
}
|
|
625
|
+
}
|
|
598
626
|
if (!await hasCredential3(deps)) return writeAuthError(deps);
|
|
599
627
|
const result = await deps.client.drops.delete(dropId);
|
|
600
628
|
if (result?.error) return writeApiErrorSimple(deps, result.error.message);
|
|
@@ -606,7 +634,11 @@ async function runDropsDelete(dropId, input, deps) {
|
|
|
606
634
|
return { exitCode: 0 };
|
|
607
635
|
}
|
|
608
636
|
async function hasCredential3(deps) {
|
|
609
|
-
return await resolveCredential({
|
|
637
|
+
return await resolveCredential({
|
|
638
|
+
...deps.apiKey ? { apiKey: deps.apiKey } : {},
|
|
639
|
+
env: deps.env,
|
|
640
|
+
store: deps.store
|
|
641
|
+
}) !== null;
|
|
610
642
|
}
|
|
611
643
|
function listItems2(data) {
|
|
612
644
|
if (data && typeof data === "object" && "data" in data) {
|
|
@@ -619,38 +651,38 @@ function listItems2(data) {
|
|
|
619
651
|
}
|
|
620
652
|
|
|
621
653
|
// src/commands/login.ts
|
|
622
|
-
var
|
|
654
|
+
var prompts3 = __toESM(require("@clack/prompts"), 1);
|
|
623
655
|
async function runLoginInteractive(deps) {
|
|
624
|
-
|
|
625
|
-
const email = await
|
|
656
|
+
prompts3.intro("dropthis login");
|
|
657
|
+
const email = await prompts3.text({
|
|
626
658
|
message: "Email address",
|
|
627
659
|
validate: (v) => v?.includes("@") ? void 0 : "Enter a valid email"
|
|
628
660
|
});
|
|
629
|
-
if (
|
|
630
|
-
|
|
661
|
+
if (prompts3.isCancel(email)) {
|
|
662
|
+
prompts3.cancel("Login cancelled.");
|
|
631
663
|
return { exitCode: 0 };
|
|
632
664
|
}
|
|
633
665
|
const requestResult = await deps.client.auth.requestEmailOtp({ email });
|
|
634
666
|
if (requestResult.error) {
|
|
635
|
-
|
|
667
|
+
prompts3.cancel(requestResult.error.message);
|
|
636
668
|
return { exitCode: exitCodeFor("api_error") };
|
|
637
669
|
}
|
|
638
|
-
const otp = await
|
|
670
|
+
const otp = await prompts3.text({
|
|
639
671
|
message: "Paste the code from your email"
|
|
640
672
|
});
|
|
641
|
-
if (
|
|
642
|
-
|
|
673
|
+
if (prompts3.isCancel(otp)) {
|
|
674
|
+
prompts3.cancel("Login cancelled.");
|
|
643
675
|
return { exitCode: 0 };
|
|
644
676
|
}
|
|
645
677
|
const session = await deps.client.auth.verifyEmailOtp({ email, code: otp });
|
|
646
678
|
if (session.error) {
|
|
647
|
-
|
|
679
|
+
prompts3.cancel(session.error.message);
|
|
648
680
|
return { exitCode: exitCodeFor("api_error") };
|
|
649
681
|
}
|
|
650
682
|
const authedClient = deps.createClient(session.data.token);
|
|
651
683
|
const apiKey = await authedClient.apiKeys.create({ label: "CLI" });
|
|
652
684
|
if (apiKey.error) {
|
|
653
|
-
|
|
685
|
+
prompts3.cancel(apiKey.error.message);
|
|
654
686
|
return { exitCode: exitCodeFor("api_error") };
|
|
655
687
|
}
|
|
656
688
|
await deps.store.save({
|
|
@@ -661,7 +693,7 @@ async function runLoginInteractive(deps) {
|
|
|
661
693
|
email,
|
|
662
694
|
storage: "secure"
|
|
663
695
|
});
|
|
664
|
-
|
|
696
|
+
prompts3.outro("Logged in successfully.");
|
|
665
697
|
return { exitCode: 0 };
|
|
666
698
|
}
|
|
667
699
|
async function runLoginRequest(input, deps) {
|
|
@@ -697,7 +729,8 @@ async function runLoginVerify(input, deps) {
|
|
|
697
729
|
);
|
|
698
730
|
return { exitCode: exitCodeFor("api_error") };
|
|
699
731
|
}
|
|
700
|
-
const
|
|
732
|
+
const authedClient = deps.createClient(session.data.token);
|
|
733
|
+
const apiKey = await authedClient.apiKeys.create({ label: "CLI" });
|
|
701
734
|
if (apiKey.error) {
|
|
702
735
|
deps.stderr(
|
|
703
736
|
`${JSON.stringify(errorEnvelope("api_error", apiKey.error.message))}
|
|
@@ -734,10 +767,10 @@ async function runLogout(input, deps) {
|
|
|
734
767
|
const result = await deps.client.apiKeys.delete(stored.keyId);
|
|
735
768
|
if (result?.error) revokeError = result.error.message;
|
|
736
769
|
}
|
|
737
|
-
await deps.store.clear();
|
|
738
770
|
if (revokeError) {
|
|
739
771
|
return writeApiErrorSimple(deps, revokeError);
|
|
740
772
|
}
|
|
773
|
+
await deps.store.clear();
|
|
741
774
|
writeHumanOrJson(deps, success("Logged out."), { ok: true });
|
|
742
775
|
return { exitCode: 0 };
|
|
743
776
|
}
|
|
@@ -793,7 +826,7 @@ async function readJsonObjectFile(path) {
|
|
|
793
826
|
var MAX_BUNDLE_FILE_COUNT = 200;
|
|
794
827
|
async function runPublish(input, raw, deps) {
|
|
795
828
|
const credential = await resolveCredential({
|
|
796
|
-
...raw.apiKey ? { apiKey: raw.apiKey } : {},
|
|
829
|
+
...raw.apiKey ?? deps.apiKey ? { apiKey: raw.apiKey ?? deps.apiKey } : {},
|
|
797
830
|
env: deps.env,
|
|
798
831
|
store: deps.store
|
|
799
832
|
});
|
|
@@ -1002,7 +1035,7 @@ function withPublishIdempotency(options) {
|
|
|
1002
1035
|
var import_node_crypto2 = require("crypto");
|
|
1003
1036
|
async function runUpdate(target, input, raw, deps) {
|
|
1004
1037
|
const credential = await resolveCredential({
|
|
1005
|
-
...raw.apiKey ? { apiKey: raw.apiKey } : {},
|
|
1038
|
+
...raw.apiKey ?? deps.apiKey ? { apiKey: raw.apiKey ?? deps.apiKey } : {},
|
|
1006
1039
|
env: deps.env,
|
|
1007
1040
|
store: deps.store
|
|
1008
1041
|
});
|
|
@@ -1234,7 +1267,9 @@ var InsecureFileCredentialStore = class {
|
|
|
1234
1267
|
}
|
|
1235
1268
|
async read() {
|
|
1236
1269
|
const value = await readJsonFile(this.filePath);
|
|
1237
|
-
|
|
1270
|
+
if (!value) return null;
|
|
1271
|
+
if (typeof value.apiKey !== "string" || !value.apiKey) return null;
|
|
1272
|
+
return { ...value, storage: "insecure" };
|
|
1238
1273
|
}
|
|
1239
1274
|
async save(credential) {
|
|
1240
1275
|
await writeCredentialFile(this.filePath, {
|
|
@@ -1257,7 +1292,7 @@ var KeyringCredentialStore = class {
|
|
|
1257
1292
|
const metadata = await readJsonFile(this.filePath);
|
|
1258
1293
|
if (!metadata) return null;
|
|
1259
1294
|
const apiKey = await this.keyring.getPassword();
|
|
1260
|
-
if (!apiKey) return null;
|
|
1295
|
+
if (typeof apiKey !== "string" || !apiKey) return null;
|
|
1261
1296
|
return { ...metadata, apiKey, storage: "secure" };
|
|
1262
1297
|
}
|
|
1263
1298
|
async save(credential) {
|
|
@@ -1316,7 +1351,7 @@ async function writeCredentialFile(path, credential) {
|
|
|
1316
1351
|
function buildProgram(options = {}) {
|
|
1317
1352
|
const program = new import_commander.Command();
|
|
1318
1353
|
const store = options.store ?? new MemoryCredentialStore();
|
|
1319
|
-
program.name("dropthis").description("Publish anything online and get a URL back.").version("0.2.
|
|
1354
|
+
program.name("dropthis").description("Publish anything online and get a URL back.").version("0.2.1");
|
|
1320
1355
|
program.option("--api-key <key>", "Override API key for this invocation");
|
|
1321
1356
|
program.option("--api-url <url>", "Override API base URL");
|
|
1322
1357
|
program.option("--json", "Force JSON output");
|
|
@@ -1325,8 +1360,8 @@ function buildProgram(options = {}) {
|
|
|
1325
1360
|
async (commandOptions) => {
|
|
1326
1361
|
if (!commandOptions.email || !commandOptions.otp) {
|
|
1327
1362
|
const deps2 = await commandDeps(program, options, store, commandOptions);
|
|
1328
|
-
const
|
|
1329
|
-
const context = createContext({ global });
|
|
1363
|
+
const global2 = globalOptions(program, commandOptions);
|
|
1364
|
+
const context = createContext({ global: global2 });
|
|
1330
1365
|
const result2 = await runLoginInteractive({
|
|
1331
1366
|
...deps2,
|
|
1332
1367
|
createClient: (apiKey) => context.createClient(apiKey)
|
|
@@ -1335,13 +1370,18 @@ function buildProgram(options = {}) {
|
|
|
1335
1370
|
return;
|
|
1336
1371
|
}
|
|
1337
1372
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1373
|
+
const global = globalOptions(program, commandOptions);
|
|
1374
|
+
const verifyContext = createContext({ global });
|
|
1338
1375
|
const result = await runLoginVerify(
|
|
1339
1376
|
{
|
|
1340
1377
|
email: commandOptions.email,
|
|
1341
1378
|
otp: commandOptions.otp,
|
|
1342
1379
|
...commandOptions.json !== void 0 ? { json: commandOptions.json } : {}
|
|
1343
1380
|
},
|
|
1344
|
-
|
|
1381
|
+
{
|
|
1382
|
+
...deps,
|
|
1383
|
+
createClient: (apiKey) => verifyContext.createClient(apiKey)
|
|
1384
|
+
}
|
|
1345
1385
|
);
|
|
1346
1386
|
process.exitCode = result.exitCode;
|
|
1347
1387
|
}
|
|
@@ -1355,7 +1395,12 @@ function buildProgram(options = {}) {
|
|
|
1355
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(
|
|
1356
1396
|
async (commandOptions) => {
|
|
1357
1397
|
const deps = await commandDeps(program, options, store, commandOptions);
|
|
1358
|
-
const
|
|
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
|
+
});
|
|
1359
1404
|
process.exitCode = result.exitCode;
|
|
1360
1405
|
}
|
|
1361
1406
|
);
|
|
@@ -1577,7 +1622,9 @@ function toDropOptions(options) {
|
|
|
1577
1622
|
};
|
|
1578
1623
|
}
|
|
1579
1624
|
function parseInteger(value) {
|
|
1580
|
-
|
|
1625
|
+
const n = Number.parseInt(value, 10);
|
|
1626
|
+
if (Number.isNaN(n)) throw new import_commander.InvalidArgumentError("Expected an integer.");
|
|
1627
|
+
return n;
|
|
1581
1628
|
}
|
|
1582
1629
|
async function resolveCommandInput(input, stdin) {
|
|
1583
1630
|
if (input !== "-") return input;
|
|
@@ -1598,22 +1645,33 @@ async function resolvePublishInputs(inputs, stdin, stdinIsTTY) {
|
|
|
1598
1645
|
}
|
|
1599
1646
|
return inputs[0];
|
|
1600
1647
|
}
|
|
1648
|
+
const {
|
|
1649
|
+
mkdtemp,
|
|
1650
|
+
copyFile,
|
|
1651
|
+
writeFile: writeFile2,
|
|
1652
|
+
stat: fsStat
|
|
1653
|
+
} = await import("fs/promises");
|
|
1654
|
+
const { join: join2, basename: pathBasename } = await import("path");
|
|
1655
|
+
const { tmpdir } = await import("os");
|
|
1656
|
+
const tmpDir = await mkdtemp(join2(tmpdir(), "dropthis-multi-"));
|
|
1601
1657
|
const resolved = [];
|
|
1602
1658
|
for (const input of inputs) {
|
|
1603
1659
|
if (input === "-") {
|
|
1604
1660
|
const buf = await readStdinBytes(stdin ?? process.stdin);
|
|
1605
|
-
const tmpPath =
|
|
1606
|
-
const { writeFile: writeFile2 } = await import("fs/promises");
|
|
1661
|
+
const tmpPath = join2(tmpDir, `stdin-${Date.now()}`);
|
|
1607
1662
|
await writeFile2(tmpPath, buf);
|
|
1608
1663
|
resolved.push(tmpPath);
|
|
1609
1664
|
} else {
|
|
1610
1665
|
resolved.push(input);
|
|
1611
1666
|
}
|
|
1612
1667
|
}
|
|
1613
|
-
const
|
|
1614
|
-
const
|
|
1615
|
-
|
|
1616
|
-
|
|
1668
|
+
const names = resolved.map((f) => pathBasename(f));
|
|
1669
|
+
const dupes = names.filter((n, i) => names.indexOf(n) !== i);
|
|
1670
|
+
if (dupes.length > 0) {
|
|
1671
|
+
throw new Error(
|
|
1672
|
+
`Duplicate file names: ${[...new Set(dupes)].join(", ")}. Rename files to avoid collisions.`
|
|
1673
|
+
);
|
|
1674
|
+
}
|
|
1617
1675
|
for (const filePath of resolved) {
|
|
1618
1676
|
const info = await fsStat(filePath);
|
|
1619
1677
|
if (info.isDirectory()) {
|
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/options.ts","../src/commands/drops.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 } 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 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\tdeps,\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 result = await runLoginVerify(commandOptions, deps);\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\treturn Number.parseInt(value, 10);\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 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 = `/tmp/.dropthis-stdin-${Date.now()}`;\n\t\t\tconst { writeFile } = await import(\"node:fs/promises\");\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 { mkdtemp, copyFile, stat: fsStat } = 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\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\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({ env: deps.env, store: deps.store })) === 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 { 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\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 (!(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({ env: deps.env, store: deps.store })) !== 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\", \"0.1.0\"],\n\t\t[\"Auth\", authSource],\n\t\t[\"Storage\", storageBackend],\n\t];\n\n\twriteKv(deps, pairs, {\n\t\tok: true,\n\t\tversion: \"0.1.0\",\n\t\tauth: { source: authSource },\n\t\tstorage: { backend: storageBackend },\n\t});\n\treturn { exitCode: 0 };\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 { 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\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 (!(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({ env: deps.env, store: deps.store })) !== 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 * 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\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 apiKey = await deps.client.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\tawait deps.store.clear();\n\tif (revokeError) {\n\t\treturn writeApiErrorSimple(deps, revokeError);\n\t}\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\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 ? { apiKey: raw.apiKey } : {}),\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\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 ? { apiKey: raw.apiKey } : {}),\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\treturn value\n\t\t\t? ({ ...value, storage: \"insecure\" } as StoredCredential)\n\t\t\t: null;\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 (!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","hasCredential","listItems","error","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","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 { 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dropthis/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Official CLI for Dropthis.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -32,11 +32,9 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@clack/prompts": "1.4.0",
|
|
35
|
-
"@commander-js/extra-typings": "14.0.0",
|
|
36
35
|
"@dropthis/node": "^0.1.0",
|
|
37
36
|
"@napi-rs/keyring": "1.3.0",
|
|
38
37
|
"commander": "14.0.3",
|
|
39
|
-
"conf": "15.1.0",
|
|
40
38
|
"picocolors": "1.1.1"
|
|
41
39
|
},
|
|
42
40
|
"devDependencies": {
|