connectbase-client 0.6.1 → 0.6.3
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 +70 -136
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -444,142 +444,62 @@ function addDeployScript(deployDir) {
|
|
|
444
444
|
warn("package.json \uC218\uC815\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4");
|
|
445
445
|
}
|
|
446
446
|
}
|
|
447
|
-
async function
|
|
447
|
+
async function downloadDocs(apiKey, templates) {
|
|
448
448
|
const claudeDir = path.join(process.cwd(), ".claude");
|
|
449
|
+
const docsDir = path.join(claudeDir, "docs");
|
|
449
450
|
const claudeMdPath = path.join(claudeDir, "CLAUDE.md");
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
451
|
+
if (!fs.existsSync(docsDir)) {
|
|
452
|
+
fs.mkdirSync(docsDir, { recursive: true });
|
|
453
|
+
}
|
|
454
|
+
if (!templates) {
|
|
455
|
+
log(`
|
|
456
|
+
${colors.dim}SDK \uAC00\uC774\uB4DC \uD15C\uD50C\uB9BF:${colors.reset}`);
|
|
457
|
+
log(` ${colors.cyan}1${colors.reset}) \uAE30\uBCF8 SDK (Database, Auth, Realtime, Storage, Payment, Push, Ads)`);
|
|
458
|
+
log(` ${colors.cyan}2${colors.reset}) \uAE30\uBCF8 SDK + \uAC8C\uC784 \uC11C\uBC84 (\uBA40\uD2F0\uD50C\uB808\uC774\uC5B4)`);
|
|
459
|
+
log(` ${colors.cyan}3${colors.reset}) \uAE30\uBCF8 SDK + \uBE44\uB514\uC624 \uC11C\uBC84 (\uB3D9\uC601\uC0C1 \uD50C\uB7AB\uD3FC)`);
|
|
460
|
+
log(` ${colors.cyan}4${colors.reset}) \uAE30\uBCF8 SDK + \uAC8C\uC784 \uC11C\uBC84 + \uBE44\uB514\uC624 \uC11C\uBC84`);
|
|
461
|
+
const templateChoice = await prompt(`
|
|
462
|
+
${colors.blue}?${colors.reset} \uC120\uD0DD (1): `) || "1";
|
|
463
|
+
templates = ["fullstack"];
|
|
464
|
+
if (templateChoice === "2" || templateChoice === "4") templates.push("game-server");
|
|
465
|
+
if (templateChoice === "3" || templateChoice === "4") templates.push("video-server");
|
|
466
|
+
}
|
|
467
|
+
info("SDK \uAC1C\uBC1C \uAC00\uC774\uB4DC \uB2E4\uC6B4\uB85C\uB4DC \uC911...");
|
|
468
|
+
try {
|
|
469
|
+
const templateParam = templates.join(",");
|
|
470
|
+
const res = await makeRequest(
|
|
471
|
+
`${DEFAULT_BASE_URL}/v1/storages/webs/claude-md?api_key=${encodeURIComponent(apiKey)}&template=${encodeURIComponent(templateParam)}&format=sections`,
|
|
472
|
+
"GET",
|
|
473
|
+
{}
|
|
474
|
+
);
|
|
475
|
+
if (res.status !== 200) {
|
|
476
|
+
throw new Error(`HTTP ${res.status}`);
|
|
477
|
+
}
|
|
478
|
+
const data = res.data;
|
|
479
|
+
let savedCount = 0;
|
|
480
|
+
for (const section of data.sections) {
|
|
481
|
+
const filePath = path.join(docsDir, section.filename);
|
|
482
|
+
fs.writeFileSync(filePath, section.content);
|
|
483
|
+
savedCount++;
|
|
484
|
+
}
|
|
485
|
+
fs.writeFileSync(claudeMdPath, data.index);
|
|
486
|
+
success(`.claude/CLAUDE.md \uC778\uB371\uC2A4 \uC0DD\uC131 \uC644\uB8CC`);
|
|
487
|
+
success(`.claude/docs/ \uC5D0 ${savedCount}\uAC1C \uC139\uC158 \uD30C\uC77C \uC800\uC7A5 \uC644\uB8CC`);
|
|
488
|
+
log(`${colors.dim}AI\uAC00 \uD544\uC694\uD55C \uC139\uC158\uB9CC \uC77D\uC5B4 \uD1A0\uD070\uC744 \uC808\uC57D\uD569\uB2C8\uB2E4${colors.reset}`);
|
|
489
|
+
} catch {
|
|
490
|
+
warn("SDK \uAC00\uC774\uB4DC \uB2E4\uC6B4\uB85C\uB4DC \uC2E4\uD328, \uAE30\uBCF8 CLAUDE.md\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4");
|
|
491
|
+
fs.writeFileSync(claudeMdPath, `# Connect Base SDK
|
|
459
492
|
|
|
460
493
|
\uC774 \uD504\uB85C\uC81D\uD2B8\uB294 Connect Base SDK\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
461
494
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
\`\`\`typescript
|
|
471
|
-
import ConnectBase from 'connectbase-client'
|
|
472
|
-
|
|
473
|
-
const cb = new ConnectBase({
|
|
474
|
-
apiKey: 'YOUR_API_KEY'
|
|
475
|
-
})
|
|
476
|
-
\`\`\`
|
|
477
|
-
|
|
478
|
-
### Database API
|
|
479
|
-
|
|
480
|
-
\`\`\`typescript
|
|
481
|
-
// \uB370\uC774\uD130 \uC870\uD68C
|
|
482
|
-
const { data, total } = await cb.database.getData('table-id', {
|
|
483
|
-
limit: 20,
|
|
484
|
-
offset: 0,
|
|
485
|
-
select: ['id', 'name', 'thumbnail'], // \uD2B9\uC815 \uD544\uB4DC\uB9CC \uC870\uD68C
|
|
486
|
-
exclude: ['html_content'] // \uD2B9\uC815 \uD544\uB4DC \uC81C\uC678
|
|
487
|
-
})
|
|
488
|
-
|
|
489
|
-
// \uC870\uAC74\uBD80 \uCFFC\uB9AC
|
|
490
|
-
const result = await cb.database.queryData('table-id', {
|
|
491
|
-
where: { field: 'status', operator: 'eq', value: 'active' },
|
|
492
|
-
orderBy: 'created_at',
|
|
493
|
-
orderDirection: 'desc'
|
|
494
|
-
})
|
|
495
|
-
|
|
496
|
-
// \uB370\uC774\uD130 \uC0DD\uC131
|
|
497
|
-
const newItem = await cb.database.createData('table-id', {
|
|
498
|
-
data: { name: 'John', email: 'john@example.com' }
|
|
499
|
-
})
|
|
500
|
-
|
|
501
|
-
// \uB370\uC774\uD130 \uC218\uC815
|
|
502
|
-
await cb.database.updateData('table-id', 'data-id', {
|
|
503
|
-
data: { name: 'Jane' }
|
|
504
|
-
})
|
|
505
|
-
|
|
506
|
-
// \uB370\uC774\uD130 \uC0AD\uC81C
|
|
507
|
-
await cb.database.deleteData('table-id', 'data-id')
|
|
508
|
-
\`\`\`
|
|
509
|
-
|
|
510
|
-
### Storage API
|
|
511
|
-
|
|
512
|
-
\`\`\`typescript
|
|
513
|
-
// \uD30C\uC77C \uC5C5\uB85C\uB4DC
|
|
514
|
-
const result = await cb.storage.uploadFile(file)
|
|
515
|
-
|
|
516
|
-
// \uD30C\uC77C \uBAA9\uB85D \uC870\uD68C
|
|
517
|
-
const files = await cb.storage.listFiles()
|
|
518
|
-
\`\`\`
|
|
519
|
-
|
|
520
|
-
### Auth API
|
|
521
|
-
|
|
522
|
-
\`\`\`typescript
|
|
523
|
-
// \uD68C\uC6D0\uAC00\uC785
|
|
524
|
-
await cb.auth.signUp({ email, password })
|
|
525
|
-
|
|
526
|
-
// \uB85C\uADF8\uC778
|
|
527
|
-
const { member, tokens } = await cb.auth.signIn({ email, password })
|
|
528
|
-
|
|
529
|
-
// \uB85C\uADF8\uC544\uC6C3
|
|
530
|
-
await cb.auth.signOut()
|
|
531
|
-
\`\`\`
|
|
532
|
-
|
|
533
|
-
### Functions API
|
|
534
|
-
|
|
535
|
-
\`\`\`typescript
|
|
536
|
-
// Serverless \uD568\uC218 \uD638\uCD9C
|
|
537
|
-
const result = await cb.functions.invoke('function-name', {
|
|
538
|
-
param1: 'value1'
|
|
539
|
-
})
|
|
540
|
-
\`\`\`
|
|
541
|
-
|
|
542
|
-
### Realtime API
|
|
543
|
-
|
|
544
|
-
\`\`\`typescript
|
|
545
|
-
// WebSocket \uC5F0\uACB0
|
|
546
|
-
cb.realtime.connect()
|
|
547
|
-
|
|
548
|
-
// \uCC44\uB110 \uAD6C\uB3C5
|
|
549
|
-
cb.realtime.subscribe('channel-name', (message) => {
|
|
550
|
-
console.log('\uBC1B\uC740 \uBA54\uC2DC\uC9C0:', message)
|
|
551
|
-
})
|
|
552
|
-
|
|
553
|
-
// \uBA54\uC2DC\uC9C0 \uC804\uC1A1
|
|
554
|
-
cb.realtime.send('channel-name', { text: 'Hello!' })
|
|
555
|
-
\`\`\`
|
|
556
|
-
|
|
557
|
-
## Where \uC5F0\uC0B0\uC790
|
|
558
|
-
|
|
559
|
-
| \uC5F0\uC0B0\uC790 | \uC124\uBA85 |
|
|
560
|
-
|--------|------|
|
|
561
|
-
| \`eq\` | \uAC19\uC74C (=) |
|
|
562
|
-
| \`neq\` | \uAC19\uC9C0 \uC54A\uC74C (!=) |
|
|
563
|
-
| \`gt\` | \uD07C (>) |
|
|
564
|
-
| \`gte\` | \uD06C\uAC70\uB098 \uAC19\uC74C (>=) |
|
|
565
|
-
| \`lt\` | \uC791\uC74C (<) |
|
|
566
|
-
| \`lte\` | \uC791\uAC70\uB098 \uAC19\uC74C (<=) |
|
|
567
|
-
| \`like\` | \uBD80\uBD84 \uC77C\uCE58 |
|
|
568
|
-
| \`in\` | \uBC30\uC5F4\uC5D0 \uD3EC\uD568 |
|
|
569
|
-
| \`nin\` | \uBC30\uC5F4\uC5D0 \uBBF8\uD3EC\uD568 |
|
|
570
|
-
| \`between\` | \uBC94\uC704 \uB0B4 |
|
|
571
|
-
| \`is_null\` | NULL \uCCB4\uD06C |
|
|
572
|
-
| \`regex\` | \uC815\uADDC\uC2DD \uB9E4\uCE6D |
|
|
573
|
-
| \`array_contains\` | \uBC30\uC5F4 \uD544\uB4DC\uC5D0 \uAC12 \uD3EC\uD568 |
|
|
574
|
-
|
|
575
|
-
## \uBC30\uD3EC
|
|
576
|
-
|
|
577
|
-
\`\`\`bash
|
|
578
|
-
npm run deploy
|
|
579
|
-
\`\`\`
|
|
580
|
-
`;
|
|
581
|
-
fs.writeFileSync(claudeMdPath, claudeMdContent);
|
|
582
|
-
success(".claude/CLAUDE.md \uC0DD\uC131 \uC644\uB8CC");
|
|
495
|
+
\uC790\uC138\uD55C \uAC00\uC774\uB4DC: https://connectbase.world
|
|
496
|
+
`);
|
|
497
|
+
success(".claude/CLAUDE.md \uC0DD\uC131 \uC644\uB8CC (\uAE30\uBCF8)");
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
async function setupClaudeCode(apiKey) {
|
|
501
|
+
const mcpConfigPath = path.join(process.cwd(), ".mcp.json");
|
|
502
|
+
await downloadDocs(apiKey);
|
|
583
503
|
const mcpConfig = {
|
|
584
504
|
mcpServers: {
|
|
585
505
|
connectbase: {
|
|
@@ -947,6 +867,7 @@ ${colors.yellow}\uC0AC\uC6A9\uBC95:${colors.reset}
|
|
|
947
867
|
|
|
948
868
|
${colors.yellow}\uBA85\uB839\uC5B4:${colors.reset}
|
|
949
869
|
init \uD504\uB85C\uC81D\uD2B8 \uCD08\uAE30\uD654 (\uC124\uC815 \uD30C\uC77C \uC0DD\uC131)
|
|
870
|
+
docs SDK \uBB38\uC11C \uB2E4\uC6B4\uB85C\uB4DC/\uC5C5\uB370\uC774\uD2B8
|
|
950
871
|
deploy <directory> \uC6F9 \uC2A4\uD1A0\uB9AC\uC9C0\uC5D0 \uD30C\uC77C \uBC30\uD3EC
|
|
951
872
|
tunnel <port> \uB85C\uCEEC \uC11C\uBE44\uC2A4\uB97C \uC778\uD130\uB137\uC5D0 \uB178\uCD9C
|
|
952
873
|
|
|
@@ -963,14 +884,17 @@ ${colors.yellow}\uBE60\uB978 \uC2DC\uC791:${colors.reset}
|
|
|
963
884
|
${colors.dim}# 1. \uCD08\uAE30\uD654 (\uCD5C\uCD08 1\uD68C)${colors.reset}
|
|
964
885
|
npx connectbase-client init
|
|
965
886
|
|
|
966
|
-
${colors.dim}# 2. \
|
|
887
|
+
${colors.dim}# 2. SDK \uBB38\uC11C \uC5C5\uB370\uC774\uD2B8${colors.reset}
|
|
888
|
+
npx connectbase docs
|
|
889
|
+
|
|
890
|
+
${colors.dim}# 3. \uBC30\uD3EC${colors.reset}
|
|
967
891
|
npm run deploy
|
|
968
892
|
|
|
969
|
-
${colors.dim}#
|
|
970
|
-
npx connectbase
|
|
893
|
+
${colors.dim}# 4. \uD130\uB110 (\uAE30\uBCF8)${colors.reset}
|
|
894
|
+
npx connectbase tunnel 3000
|
|
971
895
|
|
|
972
|
-
${colors.dim}#
|
|
973
|
-
npx connectbase
|
|
896
|
+
${colors.dim}# 5. \uD130\uB110 (GPU \uC11C\uBC84 \uB4F1 \uAE34 \uC751\uB2F5 \uC2DC)${colors.reset}
|
|
897
|
+
npx connectbase tunnel 7860 --timeout 300 --max-body 50
|
|
974
898
|
|
|
975
899
|
${colors.yellow}\uD658\uACBD\uBCC0\uC218:${colors.reset}
|
|
976
900
|
CONNECTBASE_API_KEY API Key
|
|
@@ -1036,6 +960,16 @@ async function main() {
|
|
|
1036
960
|
};
|
|
1037
961
|
if (parsed.command === "init") {
|
|
1038
962
|
await init();
|
|
963
|
+
} else if (parsed.command === "docs") {
|
|
964
|
+
let docsApiKey = config.apiKey;
|
|
965
|
+
if (!docsApiKey) {
|
|
966
|
+
docsApiKey = await prompt(`${colors.blue}?${colors.reset} API Key: `);
|
|
967
|
+
if (!docsApiKey) {
|
|
968
|
+
error("API Key\uB294 \uD544\uC218\uC785\uB2C8\uB2E4");
|
|
969
|
+
process.exit(1);
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
await downloadDocs(docsApiKey);
|
|
1039
973
|
} else if (parsed.command === "deploy") {
|
|
1040
974
|
const directory = parsed.args[0] || fileConfig.deployDir || ".";
|
|
1041
975
|
if (!config.apiKey) {
|