@sayren/mcp 0.5.1 → 0.5.2

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/index.mjs CHANGED
@@ -720,9 +720,9 @@ const RULES = [
720
720
  },
721
721
  {
722
722
  id: "checkout-origin",
723
- title: "복귀 주소는 배포된 주소(요청 origin)에서 만들고 그 도메인을 셀러 콘솔 설정 › 결제에 등록한다",
724
- why: "결제 도메인 밖의 복귀 주소는 서버가 거절한다. 주소를 코드에 고정하면 로컬·스테이징·운영 중 한 곳에서만 결제가 된다",
725
- fix: "서버 함수에서 `getRequestUrl()`의 origin으로 복귀 주소를 만든다. 배포 도메인은 셀러 콘솔 설정 › 결제의 결제 도메인에 등록한다(테스트 결제는 localhost가 항상 허용된다)",
723
+ title: "복귀 주소는 코드에 고정하지 않고 배포된 주소(요청 origin)에서 만든다",
724
+ why: "주소를 코드에 고정하면 로컬·스테이징·운영 중 한 곳에서만 결제가 제대로 돌아온다. 셀러 콘솔 설정 › 결제의 결제 도메인은 선택형 허용 목록이다. 비워 두면 https 복귀 주소를 모두 받고, 등록하면 목록 밖의 복귀 주소를 서버가 거절한다",
725
+ fix: "서버 함수에서 `getRequestUrl()`의 origin으로 복귀 주소를 만든다. 결제 도메인을 등록해 두었다면 배포 도메인도 목록에 넣는다(테스트 결제는 localhost가 항상 허용된다)",
726
726
  example: "const returnUrl = new URL(PAYMENT_RETURN_PATH, new URL(getRequestUrl()).origin);\nawait api.checkout.startPayment(checkoutId, { option, returnUrl: returnUrl.toString() });",
727
727
  doc: "/guides/payment-settings",
728
728
  templateFile: "src/routes/checkout.index.tsx"
@@ -852,7 +852,7 @@ function verifySources(files) {
852
852
  if (opensPayment && !has("prepareWindow(")) inFile("payment-popup-prepare", opensPayment, "받아 둔 결제 시작 값으로 결제창을 열지만 클릭 시점에 `payments.prepareWindow()`로 창을 먼저 여는 코드가 없다", /\bpayments\.open\(|\.open\(\s*(start|paymentStart)\b/);
853
853
  if (opensPayment && !/amounts/.test(opensPayment.content)) inFile("payment-amounts-final", opensPayment, "결제창을 열지만 결제 시작 응답의 `amounts`(확정 금액)를 화면에 반영하지 않는다", /\bpayments\.open\(/);
854
854
  const fixedReturnUrl = matches(/returnUrl\s*[:=]\s*["'`]https?:\/\//);
855
- if (fixedReturnUrl) inFile("checkout-origin", fixedReturnUrl, "복귀 주소를 고정 문자열로 두었다. 배포된 주소(요청 origin)에서 만들고 그 도메인을 결제 도메인에 등록한다", /returnUrl\s*[:=]\s*["'`]https?:\/\//);
855
+ if (fixedReturnUrl) inFile("checkout-origin", fixedReturnUrl, "복귀 주소를 고정 문자열로 두었다. 배포된 주소(요청 origin)에서 만든다", /returnUrl\s*[:=]\s*["'`]https?:\/\//);
856
856
  if (has("startPayment(") && !has(".result(")) inProject("payment-return-route", "결제 복귀 화면에서 `payments.result()`를 부르는 코드가 없다");
857
857
  if (has(".result(") && !has("PROCESSING")) inProject("payment-processing-status", "결과 확인 중(`PROCESSING`)일 때 결제 상태를 다시 조회하는 코드가 없다");
858
858
  if (has("startPayment(") && has("zipCode") && !has("quoteDelivery(")) inProject("delivery-quote-preview", "배송지 우편번호를 받지만 `checkout.quoteDelivery`로 배송비를 다시 계산하는 코드가 없다");
@@ -1026,7 +1026,7 @@ async function runCreate(argv) {
1026
1026
  }
1027
1027
  console.log(`\n다음:\n cd ${args.dir}\n pnpm install\n pnpm dev`);
1028
1028
  console.log(`
1029
- 디자인을 고친 뒤에는 MCP 도구 \`verify_storefront\`로 다시 검사해주십시오. 결제·구매자 인증·방문 분석 규칙 ${report$1.summary.rules}개를 보고, 어긴 항목마다 고칠 자리와 수정 방법·예시 코드를 알려 줍니다.\n결제까지 해 보려면 셀러 콘솔 설정 › 결제에서 결제 도메인에 이 쇼핑몰 주소를 등록해주십시오(테스트 결제는 localhost가 항상 허용됩니다).`);
1029
+ 디자인을 고친 뒤에는 MCP 도구 \`verify_storefront\`로 다시 검사해주십시오. 결제·구매자 인증·방문 분석 규칙 ${report$1.summary.rules}개를 보고, 어긴 항목마다 고칠 자리와 수정 방법·예시 코드를 알려 줍니다.\n결제 도메인(셀러 콘솔 설정 › 결제)을 비워 두면 https 복귀 주소를 모두 받습니다. 도메인을 등록했다면 이 쇼핑몰을 배포한 주소도 목록에 넣어주십시오(테스트 결제는 localhost가 항상 허용됩니다).`);
1030
1030
  if (config$1) await new Telemetry(config$1).reportVerify("create", report$1, durationMs);
1031
1031
  return 0;
1032
1032
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sayren/mcp",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "sayren-mcp": "./dist/index.mjs"
@@ -12,8 +12,8 @@
12
12
  "dependencies": {
13
13
  "@modelcontextprotocol/sdk": "^1.22.0",
14
14
  "zod": "^4.6.5",
15
- "@sayren/store-sdk": "^0.14.1",
16
- "@sayren/storefront-sdk": "^0.11.1"
15
+ "@sayren/storefront-sdk": "^0.12.0",
16
+ "@sayren/store-sdk": "^0.15.1"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@biomejs/biome": "^2.5.14",
@@ -7,8 +7,8 @@
7
7
  "zod": "^4.6.5"
8
8
  },
9
9
  "versions": {
10
- "@sayren/store-sdk": "0.14.1",
11
- "@sayren/storefront-sdk": "0.11.1",
10
+ "@sayren/store-sdk": "0.15.1",
11
+ "@sayren/storefront-sdk": "0.12.0",
12
12
  "@sayren/ui": "0.1.0"
13
13
  }
14
14
  }
@@ -74,8 +74,9 @@ EU 등 분석 쿠키에 사전 동의가 필요한 지역의 구매자를 받는
74
74
  - `src/lib/session.server.ts`·`src/start.ts` — 구매자 세션 쿠키와 갱신이다. 갱신은 요청마다 한 번이고, 같은
75
75
  리프레시 토큰의 동시 갱신은 한 번으로 모은다. 리프레시 토큰은 한 번 쓰면 폐기되므로 각자 갱신하면 로그아웃된다.
76
76
  - loader가 서버 함수로 데이터를 받아 그리는 구조 — 컴포넌트에서 다시 받으면 검색 노출과 첫 화면이 죽는다.
77
- - 결제 도메인 — 실결제는 셀러 콘솔 설정 › 결제의 **결제 도메인**에 등록한 도메인에서만 된다. 이 쇼핑몰을 배포한 주소를
78
- 등록하고, 같은 주소를 PG(토스페이먼츠·포트원) 가맹 정보에도 등록한다. 테스트 결제는 localhost에서도 된다.
77
+ - 결제 도메인 — 셀러 콘솔 설정 › 결제의 **결제 도메인**은 선택형 허용 목록이다. 비워 두면 https 복귀 주소를 모두 받고,
78
+ 등록하면 그 도메인에서만 결제가 된다. 등록했다면 이 쇼핑몰을 배포한 주소도 넣는다. 배포 주소는 PG(토스페이먼츠·포트원)
79
+ 가맹 정보에도 등록한다. 테스트 결제는 localhost에서도 된다.
79
80
 
80
81
  ## 주의
81
82
 
@@ -11,7 +11,8 @@ import type { PublicConfig } from "./config";
11
11
  * 3. 모바일이나 팝업 차단이면 같은 탭이 결제 서비스로 이동하고, 결제가 끝나면 복귀 화면(`/checkout/return`)으로
12
12
  * 돌아온다. 복귀 화면은 `payments.result()` 한 줄로 결과를 읽는다.
13
13
  * 4. 결과를 모르면(`PROCESSING`) 실패로 단정하지 말고 계속 조회한다 — 다시 결제하게 하면 이중 결제가 난다.
14
- * 5. 복귀 주소의 도메인을 셀러 콘솔 설정 › 결제의 결제 도메인에 등록한다(테스트 결제는 localhost 허용).
14
+ * 5. 셀러 콘솔 설정 › 결제의 결제 도메인을 등록했다면 복귀 주소의 도메인이 그 안에 있어야 한다(비우면 https 모두 허용,
15
+ * 테스트 결제는 localhost 허용).
15
16
  */
16
17
  /**
17
18
  * 설정마다 하나만 만든다. `prepareWindow()`로 연 창과 그 결과를 기다리는 감시가 같은 인스턴스에 묶여 있어서,
@@ -95,7 +95,7 @@ const startPayment = createServerFn({ method: "POST" })
95
95
  .handler(async ({ data }) => {
96
96
  const accessToken = readToken();
97
97
  const api = apiFor({ accessToken, cartToken: readCartToken() });
98
- // 복귀 주소 — 이 도메인이 셀러 콘솔 결제 도메인에 있어야 한다(테스트 결제는 localhost 허용)
98
+ // 복귀 주소 — 결제 도메인을 등록한 스토어는 이 도메인이 목록 안이어야 한다(테스트 결제는 localhost 허용)
99
99
  const returnUrl = new URL(PAYMENT_RETURN_PATH, new URL(getRequestUrl()).origin);
100
100
  returnUrl.searchParams.set("back", data.back);
101
101
  try {