@portone/cli 0.0.1-alpha.1 → 0.0.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.
@@ -1 +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"}
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,iBAoErD"}
@@ -2,7 +2,7 @@ import { confirm } from '@inquirer/prompts';
2
2
  import ora from 'ora';
3
3
  import chalk from 'chalk';
4
4
  import { checkClaudeInstalled } from '../steps/check-claude.js';
5
- import { installClaude } from '../steps/install-claude.js';
5
+ import { installClaude, updateClaude } from '../steps/install-claude.js';
6
6
  import { configurePlugin } from '../steps/configure-plugin.js';
7
7
  import { showIntegrationGuide } from '../steps/run-integration.js';
8
8
  import { isGitClean } from '../steps/check-git.js';
@@ -48,7 +48,16 @@ export async function setup(options = {}) {
48
48
  else {
49
49
  spinner.succeed('Claude Code 설치 확인됨');
50
50
  }
51
- // Step 2: 플러그인 설정
51
+ // Step 2: Claude Code 업데이트
52
+ spinner = ora('Claude Code 업데이트 중...').start();
53
+ try {
54
+ await updateClaude();
55
+ spinner.succeed('Claude Code 업데이트 완료');
56
+ }
57
+ catch (error) {
58
+ spinner.warn('Claude Code 업데이트 실패 (계속 진행합니다)');
59
+ }
60
+ // Step 3: 플러그인 설정
52
61
  spinner = ora('PortOne 플러그인 설정 중...').start();
53
62
  try {
54
63
  await configurePlugin(process.cwd());
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export declare function installClaude(): Promise<void>;
2
+ export declare function updateClaude(): Promise<void>;
2
3
  //# sourceMappingURL=install-claude.d.ts.map
@@ -1 +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"}
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;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
@@ -3,4 +3,8 @@ export async function installClaude() {
3
3
  // npm을 통한 Claude Code 설치
4
4
  execSync('npm install -g @anthropic-ai/claude-code', { stdio: 'inherit' });
5
5
  }
6
+ export async function updateClaude() {
7
+ // Claude Code 업데이트
8
+ execSync('claude update', { stdio: 'inherit' });
9
+ }
6
10
  //# sourceMappingURL=install-claude.js.map
@@ -1 +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"}
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;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,mBAAmB;IACnB,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAClD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portone/cli",
3
- "version": "0.0.1-alpha.1",
3
+ "version": "0.0.1",
4
4
  "private": false,
5
5
  "description": "PortOne 결제/본인인증 연동을 위한 CLI 도구 (Claude Code 기반)",
6
6
  "type": "module",
@@ -28,6 +28,7 @@
28
28
  "ora": "^9.0.0"
29
29
  },
30
30
  "devDependencies": {
31
+ "@changesets/cli": "^2.29.8",
31
32
  "@types/node": "^20.17.6",
32
33
  "tsx": "^4.20.6",
33
34
  "typescript": "^5.9.3"
@@ -1,2 +0,0 @@
1
- export declare function configureMcp(projectDir: string): Promise<void>;
2
- //# sourceMappingURL=configure-mcp.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,3 +0,0 @@
1
- import type { IntegrationOptions } from '../steps/run-integration.js';
2
- export declare function getIntegrationPrompt(options: IntegrationOptions): string;
3
- //# sourceMappingURL=prompts.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,79 +0,0 @@
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
@@ -1 +0,0 @@
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"}