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.
Files changed (2) hide show
  1. package/dist/cli.js +70 -136
  2. 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 setupClaudeCode(apiKey) {
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
- const mcpConfigPath = path.join(process.cwd(), ".mcp.json");
451
- if (!fs.existsSync(claudeDir)) {
452
- fs.mkdirSync(claudeDir, { recursive: true });
453
- }
454
- const claudeMdContent = `# CLAUDE.md
455
-
456
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
457
-
458
- ## Connect Base SDK
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
- ### \uC124\uCE58
463
-
464
- \`\`\`bash
465
- npm install connectbase-client
466
- \`\`\`
467
-
468
- ### \uAE30\uBCF8 \uC0AC\uC6A9\uBC95
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. \uBC30\uD3EC${colors.reset}
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}# 3. \uD130\uB110 (\uAE30\uBCF8)${colors.reset}
970
- npx connectbase-client tunnel 3000
893
+ ${colors.dim}# 4. \uD130\uB110 (\uAE30\uBCF8)${colors.reset}
894
+ npx connectbase tunnel 3000
971
895
 
972
- ${colors.dim}# 4. \uD130\uB110 (GPU \uC11C\uBC84 \uB4F1 \uAE34 \uC751\uB2F5 \uC2DC)${colors.reset}
973
- npx connectbase-client tunnel 7860 --timeout 300 --max-body 50
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "connectbase-client",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "Connect Base JavaScript/TypeScript SDK for browser and Node.js",
5
5
  "repository": {
6
6
  "type": "git",