connectbase-client 0.10.8 → 0.10.10
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.js +65 -84
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -122,6 +122,7 @@ function loadConfig() {
|
|
|
122
122
|
try {
|
|
123
123
|
const rcContent = JSON.parse(fs.readFileSync(rcPath, "utf-8"));
|
|
124
124
|
if (rcContent.apiKey) config.apiKey = rcContent.apiKey;
|
|
125
|
+
if (rcContent.secretKey) config.secretKey = rcContent.secretKey;
|
|
125
126
|
if (rcContent.storageId) config.storageId = rcContent.storageId;
|
|
126
127
|
if (rcContent.baseUrl) config.baseUrl = rcContent.baseUrl;
|
|
127
128
|
if (rcContent.deployDir) config.deployDir = rcContent.deployDir;
|
|
@@ -574,100 +575,83 @@ ${colors.blue}?${colors.reset} \uC120\uD0DD (\uBC88\uD638): `);
|
|
|
574
575
|
}
|
|
575
576
|
}
|
|
576
577
|
const apiKeyForSdk = publicKey || secretKey;
|
|
577
|
-
log(`
|
|
578
|
-
${colors.dim}\uC6A9\uB3C4\uB97C \uC120\uD0DD\uD558\uC138\uC694:${colors.reset}`);
|
|
579
|
-
log(` ${colors.cyan}1${colors.reset}) \uC6F9 \uBC30\uD3EC (\uC2A4\uD1A0\uB9AC\uC9C0 + \uBC30\uD3EC \uC124\uC815)`);
|
|
580
|
-
log(` ${colors.cyan}2${colors.reset}) \uD130\uB110 \uC804\uC6A9 (\uB85C\uCEEC \uC11C\uBE44\uC2A4 \uB178\uCD9C)`);
|
|
581
|
-
log(` ${colors.cyan}3${colors.reset}) SDK \uC5F0\uB3D9 (API Key\uB9CC)
|
|
582
|
-
`);
|
|
583
|
-
const useCase = await prompt(`${colors.blue}?${colors.reset} \uC120\uD0DD (1/2/3): `) || "1";
|
|
584
578
|
let storageId = "";
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
if (storages.length > 0) {
|
|
598
|
-
log(`
|
|
579
|
+
try {
|
|
580
|
+
info("\uC6F9 \uC2A4\uD1A0\uB9AC\uC9C0 \uC870\uD68C \uC911...");
|
|
581
|
+
const listRes = await makeRequest(
|
|
582
|
+
`${DEFAULT_BASE_URL}/v1/public/storages/webs`,
|
|
583
|
+
"GET",
|
|
584
|
+
{ "X-API-Key": apiKeyForSdk }
|
|
585
|
+
);
|
|
586
|
+
if (listRes.status === 200) {
|
|
587
|
+
const listData = listRes.data;
|
|
588
|
+
const storages = listData.storages || [];
|
|
589
|
+
if (storages.length > 0) {
|
|
590
|
+
log(`
|
|
599
591
|
${colors.dim}\uAE30\uC874 \uC6F9 \uC2A4\uD1A0\uB9AC\uC9C0:${colors.reset}`);
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
592
|
+
storages.forEach((s, i) => {
|
|
593
|
+
log(` ${colors.cyan}${i + 1}${colors.reset}) ${s.name} (${colors.dim}${s.id}${colors.reset})`);
|
|
594
|
+
});
|
|
595
|
+
log(` ${colors.cyan}0${colors.reset}) \uC0C8\uB85C \uC0DD\uC131`);
|
|
596
|
+
const choice = await prompt(`
|
|
605
597
|
${colors.blue}?${colors.reset} \uC120\uD0DD (\uBC88\uD638): `);
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
if (!storageId) {
|
|
613
|
-
const projectName = path.basename(cwd);
|
|
614
|
-
const name = await prompt(`${colors.blue}?${colors.reset} \uC2A4\uD1A0\uB9AC\uC9C0 \uC774\uB984 (${projectName}): `) || projectName;
|
|
615
|
-
info("\uC6F9 \uC2A4\uD1A0\uB9AC\uC9C0 \uC0DD\uC131 \uC911...");
|
|
616
|
-
const createRes = await makeRequest(
|
|
617
|
-
`${DEFAULT_BASE_URL}/v1/public/storages/webs`,
|
|
618
|
-
"POST",
|
|
619
|
-
{ "X-API-Key": apiKeyForSdk },
|
|
620
|
-
JSON.stringify({ name })
|
|
621
|
-
);
|
|
622
|
-
if (createRes.status !== 200) {
|
|
623
|
-
const data = createRes.data;
|
|
624
|
-
error(`\uC0DD\uC131 \uC2E4\uD328: ${data?.error || data?.message || `HTTP ${createRes.status}`}`);
|
|
625
|
-
process.exit(1);
|
|
626
|
-
}
|
|
627
|
-
const createData = createRes.data;
|
|
628
|
-
storageId = createData.storage_web_id;
|
|
629
|
-
success(`\uC6F9 \uC2A4\uD1A0\uB9AC\uC9C0 \uC0DD\uC131 \uC644\uB8CC: ${createData.name}`);
|
|
598
|
+
const num = parseInt(choice, 10);
|
|
599
|
+
if (num > 0 && num <= storages.length) {
|
|
600
|
+
storageId = storages[num - 1].id;
|
|
601
|
+
success(`\uC120\uD0DD\uB428: ${storages[num - 1].name}`);
|
|
630
602
|
}
|
|
631
|
-
} else {
|
|
632
|
-
throw new Error(`HTTP ${listRes.status}`);
|
|
633
603
|
}
|
|
634
|
-
} catch (err) {
|
|
635
|
-
error(`\uB124\uD2B8\uC6CC\uD06C \uC624\uB958: ${err instanceof Error ? err.message : err}`);
|
|
636
|
-
log(`${colors.dim}\uC218\uB3D9\uC73C\uB85C Storage ID\uB97C \uC785\uB825\uD558\uC138\uC694${colors.reset}`);
|
|
637
|
-
storageId = await prompt(`${colors.blue}?${colors.reset} Storage ID: `);
|
|
638
604
|
if (!storageId) {
|
|
639
|
-
|
|
640
|
-
|
|
605
|
+
const projectName = path.basename(cwd);
|
|
606
|
+
const name = await prompt(`${colors.blue}?${colors.reset} \uC2A4\uD1A0\uB9AC\uC9C0 \uC774\uB984 (${projectName}): `) || projectName;
|
|
607
|
+
info("\uC6F9 \uC2A4\uD1A0\uB9AC\uC9C0 \uC0DD\uC131 \uC911...");
|
|
608
|
+
const createRes = await makeRequest(
|
|
609
|
+
`${DEFAULT_BASE_URL}/v1/public/storages/webs`,
|
|
610
|
+
"POST",
|
|
611
|
+
{ "X-API-Key": apiKeyForSdk },
|
|
612
|
+
JSON.stringify({ name })
|
|
613
|
+
);
|
|
614
|
+
if (createRes.status !== 200) {
|
|
615
|
+
const data = createRes.data;
|
|
616
|
+
error(`\uC0DD\uC131 \uC2E4\uD328: ${data?.error || data?.message || `HTTP ${createRes.status}`}`);
|
|
617
|
+
process.exit(1);
|
|
618
|
+
}
|
|
619
|
+
const createData = createRes.data;
|
|
620
|
+
storageId = createData.storage_web_id;
|
|
621
|
+
success(`\uC6F9 \uC2A4\uD1A0\uB9AC\uC9C0 \uC0DD\uC131 \uC644\uB8CC: ${createData.name}`);
|
|
641
622
|
}
|
|
623
|
+
} else {
|
|
624
|
+
throw new Error(`HTTP ${listRes.status}`);
|
|
625
|
+
}
|
|
626
|
+
} catch (err) {
|
|
627
|
+
error(`\uB124\uD2B8\uC6CC\uD06C \uC624\uB958: ${err instanceof Error ? err.message : err}`);
|
|
628
|
+
log(`${colors.dim}\uC218\uB3D9\uC73C\uB85C Storage ID\uB97C \uC785\uB825\uD558\uC138\uC694${colors.reset}`);
|
|
629
|
+
storageId = await prompt(`${colors.blue}?${colors.reset} Storage ID: `);
|
|
630
|
+
if (!storageId) {
|
|
631
|
+
error("Storage ID\uB294 \uD544\uC218\uC785\uB2C8\uB2E4");
|
|
632
|
+
process.exit(1);
|
|
642
633
|
}
|
|
643
|
-
const defaultDir = detectBuildDir();
|
|
644
|
-
deployDir = await prompt(`${colors.blue}?${colors.reset} \uBC30\uD3EC \uB514\uB809\uD1A0\uB9AC (${defaultDir}): `) || defaultDir;
|
|
645
634
|
}
|
|
635
|
+
const defaultDir = detectBuildDir();
|
|
636
|
+
const deployDir = await prompt(`${colors.blue}?${colors.reset} \uBC30\uD3EC \uB514\uB809\uD1A0\uB9AC (${defaultDir}): `) || defaultDir;
|
|
646
637
|
const config = {
|
|
647
|
-
apiKey:
|
|
638
|
+
apiKey: publicKey || "",
|
|
639
|
+
storageId,
|
|
640
|
+
deployDir
|
|
648
641
|
};
|
|
649
|
-
if (
|
|
650
|
-
|
|
642
|
+
if (secretKey) {
|
|
643
|
+
config.secretKey = secretKey;
|
|
644
|
+
}
|
|
651
645
|
fs.writeFileSync(rcPath, JSON.stringify(config, null, 2) + "\n");
|
|
652
646
|
success(".connectbaserc \uC0DD\uC131 \uC644\uB8CC");
|
|
653
647
|
addToGitignore(".connectbaserc");
|
|
654
|
-
|
|
655
|
-
addDeployScript(deployDir);
|
|
656
|
-
}
|
|
648
|
+
addDeployScript(deployDir);
|
|
657
649
|
await setupClaudeCode(apiKeyForSdk, secretKey, projectRoot);
|
|
658
650
|
log(`
|
|
659
651
|
${colors.green}\uCD08\uAE30\uD654 \uC644\uB8CC!${colors.reset}
|
|
660
652
|
`);
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
log(` ${colors.cyan}npm run deploy${colors.reset}`);
|
|
664
|
-
} else if (useCase === "2") {
|
|
665
|
-
log(`${colors.dim}\uD130\uB110 \uC2DC\uC791\uD558\uB824\uBA74:${colors.reset}`);
|
|
666
|
-
log(` ${colors.cyan}npx connectbase tunnel <\uD3EC\uD2B8>${colors.reset}`);
|
|
667
|
-
} else {
|
|
668
|
-
log(`${colors.dim}SDK \uC0AC\uC6A9\uBC95:${colors.reset}`);
|
|
669
|
-
log(` ${colors.cyan}import ConnectBase from 'connectbase-client'${colors.reset}`);
|
|
670
|
-
}
|
|
653
|
+
log(`${colors.dim}\uBC30\uD3EC\uD558\uB824\uBA74:${colors.reset}`);
|
|
654
|
+
log(` ${colors.cyan}npm run deploy${colors.reset}`);
|
|
671
655
|
log(`
|
|
672
656
|
${colors.dim}Claude Code\uC5D0\uC11C MCP\uAC00 \uC790\uB3D9 \uC5F0\uACB0\uB429\uB2C8\uB2E4${colors.reset}
|
|
673
657
|
`);
|
|
@@ -1131,16 +1115,13 @@ ${colors.blue}?${colors.reset} \uC571 \uC120\uD0DD (\uBC88\uD638): `);
|
|
|
1131
1115
|
return createData.app_id;
|
|
1132
1116
|
}
|
|
1133
1117
|
async function startTunnel(port, config, tunnelOpts) {
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
}
|
|
1139
|
-
if (!config.apiKey.startsWith("cb_sk_")) {
|
|
1140
|
-
error("\uD130\uB110\uC740 \uC720\uC800 Secret Key(cb_sk_)\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. Public Key(cb_pk_)\uB294 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
|
|
1141
|
-
info("Secret Key\uB294 \uCF58\uC194 > \uD504\uB85C\uD544 > \uC2DC\uD06C\uB9BF \uD0A4 \uD0ED\uC5D0\uC11C \uC0DD\uC131\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4");
|
|
1118
|
+
const tunnelKey = config.secretKey || (config.apiKey?.startsWith("cb_sk_") ? config.apiKey : "");
|
|
1119
|
+
if (!tunnelKey) {
|
|
1120
|
+
error('Secret Key\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. "npx connectbase init"\uC73C\uB85C \uC124\uC815\uD558\uAC70\uB098 -k \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uC138\uC694');
|
|
1121
|
+
info("init \uC2DC \uBE0C\uB77C\uC6B0\uC800 \uB85C\uADF8\uC778\uC73C\uB85C Secret Key\uAC00 \uC790\uB3D9 \uBC1C\uAE09\uB429\uB2C8\uB2E4");
|
|
1142
1122
|
process.exit(1);
|
|
1143
1123
|
}
|
|
1124
|
+
config.apiKey = tunnelKey;
|
|
1144
1125
|
const appId = await resolveAppForTunnel(config.apiKey, config.baseUrl, tunnelOpts?.appId);
|
|
1145
1126
|
const tunnelServerUrl = getTunnelServerUrl(config.baseUrl);
|
|
1146
1127
|
const parsedUrl = new URL(tunnelServerUrl);
|