@portone/cli 0.0.1-alpha.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.
Files changed (39) hide show
  1. package/README.md +1 -0
  2. package/bin/portone.js +2 -0
  3. package/dist/commands/setup.d.ts +5 -0
  4. package/dist/commands/setup.d.ts.map +1 -0
  5. package/dist/commands/setup.js +66 -0
  6. package/dist/commands/setup.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +15 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/steps/check-claude.d.ts +2 -0
  12. package/dist/steps/check-claude.d.ts.map +1 -0
  13. package/dist/steps/check-claude.js +15 -0
  14. package/dist/steps/check-claude.js.map +1 -0
  15. package/dist/steps/check-git.d.ts +2 -0
  16. package/dist/steps/check-git.d.ts.map +1 -0
  17. package/dist/steps/check-git.js +14 -0
  18. package/dist/steps/check-git.js.map +1 -0
  19. package/dist/steps/configure-mcp.d.ts +2 -0
  20. package/dist/steps/configure-mcp.d.ts.map +1 -0
  21. package/dist/steps/configure-mcp.js +7 -0
  22. package/dist/steps/configure-mcp.js.map +1 -0
  23. package/dist/steps/configure-plugin.d.ts +2 -0
  24. package/dist/steps/configure-plugin.d.ts.map +1 -0
  25. package/dist/steps/configure-plugin.js +9 -0
  26. package/dist/steps/configure-plugin.js.map +1 -0
  27. package/dist/steps/install-claude.d.ts +2 -0
  28. package/dist/steps/install-claude.d.ts.map +1 -0
  29. package/dist/steps/install-claude.js +6 -0
  30. package/dist/steps/install-claude.js.map +1 -0
  31. package/dist/steps/run-integration.d.ts +2 -0
  32. package/dist/steps/run-integration.d.ts.map +1 -0
  33. package/dist/steps/run-integration.js +12 -0
  34. package/dist/steps/run-integration.js.map +1 -0
  35. package/dist/utils/prompts.d.ts +3 -0
  36. package/dist/utils/prompts.d.ts.map +1 -0
  37. package/dist/utils/prompts.js +79 -0
  38. package/dist/utils/prompts.js.map +1 -0
  39. package/package.json +43 -0
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # portone-cli
package/bin/portone.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../dist/index.js';
@@ -0,0 +1,5 @@
1
+ export interface SetupOptions {
2
+ allowDirty?: boolean;
3
+ }
4
+ export declare function setup(options?: SetupOptions): Promise<void>;
5
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,iBA2DrD"}
@@ -0,0 +1,66 @@
1
+ import { confirm } from '@inquirer/prompts';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+ import { checkClaudeInstalled } from '../steps/check-claude.js';
5
+ import { installClaude } from '../steps/install-claude.js';
6
+ import { configurePlugin } from '../steps/configure-plugin.js';
7
+ import { showIntegrationGuide } from '../steps/run-integration.js';
8
+ import { isGitClean } from '../steps/check-git.js';
9
+ export async function setup(options = {}) {
10
+ console.log(chalk.bold('\n๐Ÿš€ PortOne ์—ฐ๋™ ์„ค์ •์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค\n'));
11
+ // Step 0: Git ์ƒํƒœ ํ™•์ธ
12
+ if (!options.allowDirty) {
13
+ const gitSpinner = ora('Git ์ƒํƒœ ํ™•์ธ ์ค‘...').start();
14
+ const clean = await isGitClean();
15
+ if (!clean) {
16
+ gitSpinner.fail('Git์— ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค');
17
+ console.log(chalk.yellow('\n๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ --allow-dirty ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”'));
18
+ process.exit(1);
19
+ }
20
+ gitSpinner.succeed('Git ์ƒํƒœ ํ™•์ธ๋จ');
21
+ }
22
+ // Step 1: Claude Code ์„ค์น˜ ํ™•์ธ
23
+ let spinner = ora('Claude Code ์„ค์น˜ ํ™•์ธ ์ค‘...').start();
24
+ const isClaudeInstalled = await checkClaudeInstalled();
25
+ if (!isClaudeInstalled) {
26
+ spinner.warn('Claude Code๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค');
27
+ const shouldInstall = await confirm({
28
+ message: 'Claude Code๋ฅผ ์„ค์น˜ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?',
29
+ default: true
30
+ });
31
+ if (shouldInstall) {
32
+ spinner = ora('Claude Code ์„ค์น˜ ์ค‘...').start();
33
+ try {
34
+ await installClaude();
35
+ spinner.succeed('Claude Code ์„ค์น˜ ์™„๋ฃŒ');
36
+ }
37
+ catch (error) {
38
+ spinner.fail('Claude Code ์„ค์น˜ ์‹คํŒจ');
39
+ console.log(chalk.yellow('\nClaude Code ์ˆ˜๋™ ์„ค์น˜: npm install -g @anthropic-ai/claude-code'));
40
+ process.exit(1);
41
+ }
42
+ }
43
+ else {
44
+ console.log(chalk.yellow('\nClaude Code ์ˆ˜๋™ ์„ค์น˜: npm install -g @anthropic-ai/claude-code'));
45
+ process.exit(1);
46
+ }
47
+ }
48
+ else {
49
+ spinner.succeed('Claude Code ์„ค์น˜ ํ™•์ธ๋จ');
50
+ }
51
+ // Step 2: ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •
52
+ spinner = ora('PortOne ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ • ์ค‘...').start();
53
+ try {
54
+ await configurePlugin(process.cwd());
55
+ spinner.succeed('ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ • ์™„๋ฃŒ');
56
+ }
57
+ catch (error) {
58
+ spinner.fail('ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ • ์‹คํŒจ');
59
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
60
+ process.exit(1);
61
+ }
62
+ // Step 4: ์•ˆ๋‚ด ์ถœ๋ ฅ
63
+ console.log(chalk.green('\nโœ… ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!'));
64
+ showIntegrationGuide();
65
+ }
66
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMnD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAwB,EAAE;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAEvD,oBAAoB;IACpB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAEvD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAE1C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;YAClC,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,aAAa,EAAE,CAAC;gBACtB,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAC;gBAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7C,oBAAoB,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { setup } from './commands/setup.js';
4
+ const program = new Command();
5
+ program
6
+ .name('portone')
7
+ .description('PortOne ๊ฒฐ์ œ/๋ณธ์ธ์ธ์ฆ ์—ฐ๋™์„ ์œ„ํ•œ CLI ๋„๊ตฌ')
8
+ .version('0.1.0');
9
+ program
10
+ .command('setup')
11
+ .description('Claude Code์™€ PortOne MCP ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์—ฐ๋™์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค')
12
+ .option('--allow-dirty', 'git์ด clean ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ์–ด๋„ ์‹คํ–‰์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค')
13
+ .action(setup);
14
+ program.parse();
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,+BAA+B,CAAC;KAC5C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,eAAe,EAAE,+BAA+B,CAAC;KACxD,MAAM,CAAC,KAAK,CAAC,CAAC;AAEjB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function checkClaudeInstalled(): Promise<boolean>;
2
+ //# sourceMappingURL=check-claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-claude.d.ts","sourceRoot":"","sources":["../../src/steps/check-claude.ts"],"names":[],"mappings":"AAKA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS7D"}
@@ -0,0 +1,15 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ const execAsync = promisify(exec);
4
+ export async function checkClaudeInstalled() {
5
+ try {
6
+ const { stdout } = await execAsync('claude --version');
7
+ console.log(stdout);
8
+ return stdout.includes('Claude Code');
9
+ }
10
+ catch (error) {
11
+ console.error(error);
12
+ return false;
13
+ }
14
+ }
15
+ //# sourceMappingURL=check-claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-claude.js","sourceRoot":"","sources":["../../src/steps/check-claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function isGitClean(): Promise<boolean>;
2
+ //# sourceMappingURL=check-git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-git.d.ts","sourceRoot":"","sources":["../../src/steps/check-git.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAQnD"}
@@ -0,0 +1,14 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ const execAsync = promisify(exec);
4
+ export async function isGitClean() {
5
+ try {
6
+ const { stdout } = await execAsync('git status --porcelain');
7
+ return stdout.trim() === '';
8
+ }
9
+ catch {
10
+ // git ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ฒดํฌ ๊ฑด๋„ˆ๋œ€
11
+ return true;
12
+ }
13
+ }
14
+ //# sourceMappingURL=check-git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-git.js","sourceRoot":"","sources":["../../src/steps/check-git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function configureMcp(projectDir: string): Promise<void>;
2
+ //# sourceMappingURL=configure-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-mcp.d.ts","sourceRoot":"","sources":["../../src/steps/configure-mcp.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpE"}
@@ -0,0 +1,7 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ const execAsync = promisify(exec);
4
+ export async function configureMcp(projectDir) {
5
+ await execAsync('claude mcp add portone --scope project -- npx -y @portone/mcp-server@latest', { cwd: projectDir });
6
+ }
7
+ //# sourceMappingURL=configure-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-mcp.js","sourceRoot":"","sources":["../../src/steps/configure-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB;IACnD,MAAM,SAAS,CACb,6EAA6E,EAC7E,EAAE,GAAG,EAAE,UAAU,EAAE,CACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function configurePlugin(projectDir: string): Promise<void>;
2
+ //# sourceMappingURL=configure-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-plugin.d.ts","sourceRoot":"","sources":["../../src/steps/configure-plugin.ts"],"names":[],"mappings":"AAKA,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE"}
@@ -0,0 +1,9 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ const execAsync = promisify(exec);
4
+ export async function configurePlugin(projectDir) {
5
+ await execAsync('claude plugin marketplace remove portone', { cwd: projectDir }).catch(() => { });
6
+ await execAsync('claude plugin marketplace add portone-io/portone-cli', { cwd: projectDir });
7
+ await execAsync('claude plugin install portone-integration', { cwd: projectDir });
8
+ }
9
+ //# sourceMappingURL=configure-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-plugin.js","sourceRoot":"","sources":["../../src/steps/configure-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB;IACtD,MAAM,SAAS,CAAC,0CAA0C,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjG,MAAM,SAAS,CAAC,sDAAsD,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7F,MAAM,SAAS,CAAC,2CAA2C,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;AACpF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function installClaude(): Promise<void>;
2
+ //# sourceMappingURL=install-claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-claude.d.ts","sourceRoot":"","sources":["../../src/steps/install-claude.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAGnD"}
@@ -0,0 +1,6 @@
1
+ import { execSync } from 'child_process';
2
+ export async function installClaude() {
3
+ // npm์„ ํ†ตํ•œ Claude Code ์„ค์น˜
4
+ execSync('npm install -g @anthropic-ai/claude-code', { stdio: 'inherit' });
5
+ }
6
+ //# sourceMappingURL=install-claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-claude.js","sourceRoot":"","sources":["../../src/steps/install-claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,yBAAyB;IACzB,QAAQ,CAAC,0CAA0C,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function showIntegrationGuide(): void;
2
+ //# sourceMappingURL=run-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-integration.d.ts","sourceRoot":"","sources":["../../src/steps/run-integration.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,IAAI,IAAI,CAU3C"}
@@ -0,0 +1,12 @@
1
+ import chalk from 'chalk';
2
+ export function showIntegrationGuide() {
3
+ const command = '/portone-integration:start';
4
+ console.log(chalk.cyan('\n๐Ÿ“‹ ๋‹ค์Œ ๋‹จ๊ณ„'));
5
+ console.log(chalk.white('โ”€'.repeat(40)));
6
+ console.log(chalk.white('\n1. Claude Code๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”:'));
7
+ console.log(chalk.yellow(' $ claude\n'));
8
+ console.log(chalk.white('2. ์•„๋ž˜ ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:'));
9
+ console.log(chalk.green(` ${command}\n`));
10
+ console.log(chalk.white('โ”€'.repeat(40)));
11
+ }
12
+ //# sourceMappingURL=run-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-integration.js","sourceRoot":"","sources":["../../src/steps/run-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,4BAA4B,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IntegrationOptions } from '../steps/run-integration.js';
2
+ export declare function getIntegrationPrompt(options: IntegrationOptions): string;
3
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAQxE"}
@@ -0,0 +1,79 @@
1
+ export function getIntegrationPrompt(options) {
2
+ const { type, version, pg, method } = options;
3
+ if (type === 'payment') {
4
+ return getPaymentPrompt(version, pg, method);
5
+ }
6
+ return getIdentityPrompt(version);
7
+ }
8
+ function getPaymentPrompt(version, pg, method) {
9
+ const versionLabel = version.toUpperCase();
10
+ return `ํฌํŠธ์› ${versionLabel} ๊ฒฐ์ œ ์—ฐ๋™์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”.
11
+
12
+ ${pg ? `PG์‚ฌ: ${pg}` : ''}
13
+ ${method ? `๊ฒฐ์ œ์ˆ˜๋‹จ: ${method}` : ''}
14
+
15
+ ## ์ˆ˜ํ–‰ํ•  ์ž‘์—…
16
+
17
+ 1. **ํ”„๋กœ์ ํŠธ ๋ถ„์„**
18
+ - ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ํŒŒ์•… (ํ”„๋ ˆ์ž„์›Œํฌ, ์–ธ์–ด ๋“ฑ)
19
+ - package.json ๋˜๋Š” ๊ด€๋ จ ์„ค์ • ํŒŒ์ผ ํ™•์ธ
20
+
21
+ 2. **ํฌํŠธ์› ๋ฌธ์„œ ์ฐธ์กฐ**
22
+ - portone MCP ์„œ๋ฒ„์˜ readPortoneV2FrontendCode, readPortoneV2BackendCode ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต์‹ ์˜ˆ์‹œ ์ฝ”๋“œ ํ™•์ธ
23
+ - listPortoneDocs, readPortoneDoc ๋„๊ตฌ๋กœ ํ•„์š”ํ•œ ๋ฌธ์„œ ์ฐธ์กฐ
24
+
25
+ 3. **๊ฒฐ์ œ ์—ฐ๋™ ์ฝ”๋“œ ์ƒ์„ฑ**
26
+ - ํ”„๋ก ํŠธ์—”๋“œ: ๊ฒฐ์ œ ์š”์ฒญ ํŽ˜์ด์ง€/์ปดํฌ๋„ŒํŠธ
27
+ - ๋ฐฑ์—”๋“œ: ๊ฒฐ์ œ ๊ฒ€์ฆ API ์—”๋“œํฌ์ธํŠธ
28
+ - ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ํŒŒ์ผ ์ƒ์„ฑ
29
+
30
+ 4. **ํ™˜๊ฒฝ ์„ค์ •**
31
+ - ํ•„์š”ํ•œ npm ํŒจํ‚ค์ง€ ์„ค์น˜ (npm install ์‹คํ–‰)
32
+ - .env.example ๋˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ์•ˆ๋‚ด
33
+
34
+ 5. **ํ…Œ์ŠคํŠธ ์•ˆ๋‚ด**
35
+ - ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ• ์„ค๋ช…
36
+ - ํ…Œ์ŠคํŠธ์šฉ ์นด๋“œ๋ฒˆํ˜ธ ๋“ฑ ์•ˆ๋‚ด
37
+
38
+ ## ์ฃผ์˜์‚ฌํ•ญ
39
+ - API ํ‚ค๋Š” ๋ฐ˜๋“œ์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ
40
+ - ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํฌํ•จ
41
+ - ํฌํŠธ์› ${versionLabel} API ์ŠคํŽ™ ์ค€์ˆ˜
42
+ - ์‹ค์ œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”
43
+ `;
44
+ }
45
+ function getIdentityPrompt(version) {
46
+ const versionLabel = version.toUpperCase();
47
+ return `ํฌํŠธ์› ${versionLabel} ๋ณธ์ธ์ธ์ฆ ์—ฐ๋™์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”.
48
+
49
+ ## ์ˆ˜ํ–‰ํ•  ์ž‘์—…
50
+
51
+ 1. **ํ”„๋กœ์ ํŠธ ๋ถ„์„**
52
+ - ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ํŒŒ์•…
53
+ - ์‚ฌ์šฉ ์ค‘์ธ ํ”„๋ ˆ์ž„์›Œํฌ ํ™•์ธ
54
+
55
+ 2. **ํฌํŠธ์› ๋ฌธ์„œ ์ฐธ์กฐ**
56
+ - portone MCP ์„œ๋ฒ„์˜ listPortoneDocs, readPortoneDoc ๋„๊ตฌ๋กœ ๋ณธ์ธ์ธ์ฆ ๊ด€๋ จ ๋ฌธ์„œ ์ฐธ์กฐ
57
+ - ๋ณธ์ธ์ธ์ฆ API ์ŠคํŽ™ ํ™•์ธ
58
+
59
+ 3. **๋ณธ์ธ์ธ์ฆ ์—ฐ๋™ ์ฝ”๋“œ ์ƒ์„ฑ**
60
+ - ํ”„๋ก ํŠธ์—”๋“œ: ๋ณธ์ธ์ธ์ฆ ์š”์ฒญ ํŽ˜์ด์ง€/์ปดํฌ๋„ŒํŠธ
61
+ - ๋ฐฑ์—”๋“œ: ๋ณธ์ธ์ธ์ฆ ๊ฒฐ๊ณผ ์กฐํšŒ API
62
+ - ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ํŒŒ์ผ ์ƒ์„ฑ
63
+
64
+ 4. **ํ™˜๊ฒฝ ์„ค์ •**
65
+ - ํ•„์š”ํ•œ npm ํŒจํ‚ค์ง€ ์„ค์น˜
66
+ - ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ์•ˆ๋‚ด
67
+
68
+ 5. **ํ…Œ์ŠคํŠธ ์•ˆ๋‚ด**
69
+ - ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ • ๋ฐฉ๋ฒ•
70
+ - ๋ณธ์ธ์ธ์ฆ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ ๋ฐฉ๋ฒ•
71
+
72
+ ## ์ฃผ์˜์‚ฌํ•ญ
73
+ - API ํ‚ค๋Š” ๋ฐ˜๋“œ์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ
74
+ - ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๊ณ ๋ ค
75
+ - ํฌํŠธ์› ${versionLabel} API ์ŠคํŽ™ ์ค€์ˆ˜
76
+ - ์‹ค์ œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”
77
+ `;
78
+ }
79
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,OAA2B;IAC9D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,gBAAgB,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAoB,EAAE,EAAW,EAAE,MAAe;IAC1E,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAE3C,OAAO,OAAO,YAAY;;EAE1B,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;EACtB,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BzB,YAAY;;CAEnB,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAoB;IAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAE3C,OAAO,OAAO,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BpB,YAAY;;CAEnB,CAAC;AACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@portone/cli",
3
+ "version": "0.0.1-alpha.1",
4
+ "private": false,
5
+ "description": "PortOne ๊ฒฐ์ œ/๋ณธ์ธ์ธ์ฆ ์—ฐ๋™์„ ์œ„ํ•œ CLI ๋„๊ตฌ (Claude Code ๊ธฐ๋ฐ˜)",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "bin": {
9
+ "portone": "./bin/portone.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "bin",
14
+ "README.md"
15
+ ],
16
+ "keywords": [
17
+ "portone",
18
+ "payment",
19
+ "identity-verification",
20
+ "claude-code",
21
+ "cli"
22
+ ],
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "@inquirer/prompts": "^8.0.2",
26
+ "chalk": "^5.6.2",
27
+ "commander": "^12.1.0",
28
+ "ora": "^9.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^20.17.6",
32
+ "tsx": "^4.20.6",
33
+ "typescript": "^5.9.3"
34
+ },
35
+ "engines": {
36
+ "node": ">=20.0.0"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "dev": "tsx src/index.ts",
41
+ "start": "node dist/index.js"
42
+ }
43
+ }