@sayren/store-sdk 0.14.0 → 0.14.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.
package/dist/index.d.mts CHANGED
@@ -165,8 +165,8 @@ export declare const auditLogPageSchema: z.ZodObject<{
165
165
  }, z.core.$strip>;
166
166
  export type AuditLogPage = z.infer<typeof auditLogPageSchema>;
167
167
  export declare const agentPolicyDecisionSchema: z.ZodEnum<{
168
- APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
169
168
  DENIED: "DENIED";
169
+ APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
170
170
  ALLOW: "ALLOW";
171
171
  }>;
172
172
  export type AgentPolicyDecision = z.infer<typeof agentPolicyDecisionSchema>;
@@ -190,8 +190,8 @@ export type WritePreview = z.infer<typeof writePreviewSchema>;
190
190
  export declare const writeDryRunResultSchema: z.ZodObject<{
191
191
  dryRun: z.ZodLiteral<true>;
192
192
  decision: z.ZodEnum<{
193
- APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
194
193
  DENIED: "DENIED";
194
+ APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
195
195
  ALLOW: "ALLOW";
196
196
  }>;
197
197
  reason: z.ZodNullable<z.ZodString>;
@@ -3207,7 +3207,7 @@ export declare const TOSS_WIDGET_CLIENT_KEY_PATTERN: RegExp;
3207
3207
  /** 토스페이먼츠 결제위젯 시크릿 키 접두사. {@link TOSS_WIDGET_CLIENT_KEY_PATTERN} 참고 */
3208
3208
  export declare const TOSS_WIDGET_SECRET_KEY_PATTERN: RegExp;
3209
3209
  /** 결제위젯 키를 거부할 때의 필드 메시지 */
3210
- export declare const TOSS_WIDGET_KEY_MESSAGE = "결제위젯 키가 아니라 API 개별 연동 키를 입력해주세요";
3210
+ export declare const TOSS_WIDGET_KEY_MESSAGE = "결제위젯 키가 아니라 API 개별 연동 키를 입력해주십시오";
3211
3211
  export declare const tossPaymentsCredentialsInputSchema: z.ZodObject<{
3212
3212
  clientKey: z.ZodString;
3213
3213
  secretKey: z.ZodOptional<z.ZodString>;
package/dist/index.mjs CHANGED
@@ -1577,7 +1577,7 @@ const TOSS_WIDGET_CLIENT_KEY_PATTERN = /^(test|live)_gck_/;
1577
1577
  /** 토스페이먼츠 결제위젯 시크릿 키 접두사. {@link TOSS_WIDGET_CLIENT_KEY_PATTERN} 참고 */
1578
1578
  const TOSS_WIDGET_SECRET_KEY_PATTERN = /^(test|live)_gsk_/;
1579
1579
  /** 결제위젯 키를 거부할 때의 필드 메시지 */
1580
- const TOSS_WIDGET_KEY_MESSAGE = "결제위젯 키가 아니라 API 개별 연동 키를 입력해주세요";
1580
+ const TOSS_WIDGET_KEY_MESSAGE = "결제위젯 키가 아니라 API 개별 연동 키를 입력해주십시오";
1581
1581
  const tossPaymentsCredentialsInputSchema = z.object({
1582
1582
  clientKey: z.string().trim().min(8).max(200).describe("클라이언트 키 (`test_ck_…`/`live_ck_…`). 공개 값 — 결제창에서 쓰인다"),
1583
1583
  secretKey: secretInput().optional().describe("시크릿 키 (`test_sk_…`/`live_sk_…`). 비밀 값. 최초 연결 시 필수, 수정 시 생략하면 기존 값을 유지한다"),
@@ -1624,12 +1624,12 @@ const updatePaymentProviderRequestSchema = z.object({
1624
1624
  enabled: z.boolean().optional().describe("사용 여부. 켜려면 활성 환경(샌드박스면 TEST, 아니면 LIVE) 자격 증명이 모두 저장돼 있어야 한다(`PAYMENT_PROVIDER_INCOMPLETE`)"),
1625
1625
  sandboxMode: z.boolean().optional().describe("샌드박스 스위치. `true`면 새 결제에 TEST 세트를 쓴다(항상 허용). `false`(라이브 전환)는 라이브 개방 조건을 모두 충족해야 한다(`LIVE_GATE_NOT_MET`)"),
1626
1626
  easyPayProviders: z.array(easyPayProviderSchema).max(easyPayProviderSchema.options.length).optional().describe("이 PG로 받는 간편결제사 — 통째로 바꾼다. PG 계약(포트원은 채널)에 추가한 간편결제만 켠다. 켠 간편결제사마다 스토어프론트 결제 옵션이 하나씩 생긴다(포트원은 간편결제를 받는 채널이 있어야 한다)")
1627
- }).refine((body) => body.enabled !== void 0 || body.sandboxMode !== void 0 || body.easyPayProviders !== void 0, { message: "enabled·sandboxMode·easyPayProviders 중 하나는 보내야 해요" });
1627
+ }).refine((body) => body.enabled !== void 0 || body.sandboxMode !== void 0 || body.easyPayProviders !== void 0, { message: "enabled·sandboxMode·easyPayProviders 중 하나는 보내야 합니다" });
1628
1628
  const verifyPaymentProviderRequestSchema = z.object({ environment: pgEnvironmentSchema.optional().describe("연결 테스트할 자격 증명 세트. 생략하면 활성 환경(샌드박스면 TEST, 아니면 LIVE)") });
1629
1629
  const updatePaymentSettingsRequestSchema = z.object({
1630
1630
  priority: z.array(pgProviderSchema).min(1).max(50).optional().describe("PG 우선순위(앞이 1순위) — 스토어프론트 결제 옵션 목록의 PG 순서다. 연결된 PG 수만큼 **모두 한 번씩** 나열한다(길이 상한 50은 안전장치다). 빠지거나 중복되거나 연결되지 않은 PG가 있으면 `INVALID_PRIORITY`"),
1631
1631
  checkoutOrigins: z.array(z.string().max(200)).max(20).optional().describe("결제 도메인 — 통째로 바꾼다. 결제를 마친 구매자가 돌아올 스토어프론트 origin(`https://shop.example.com`, https·경로 없음). 결제 시작의 `returnUrl`은 이 목록 안이어야 한다. 비어 있으면 실결제를 시작할 수 없다(테스트 결제는 localhost 허용). 같은 도메인을 PG 가맹 정보에도 등록한다. 형식이 틀리면 `INVALID_CHECKOUT_ORIGIN`")
1632
- }).refine((body) => body.priority !== void 0 || body.checkoutOrigins !== void 0, { message: "priority 또는 checkoutOrigins 중 하나는 보내야 해요" });
1632
+ }).refine((body) => body.priority !== void 0 || body.checkoutOrigins !== void 0, { message: "priority 또는 checkoutOrigins 중 하나는 보내야 합니다" });
1633
1633
  const maskedSecretSchema = z.object({
1634
1634
  field: z.string().describe("비밀 필드 이름 (`secretKey`·`apiSecret`·`webhookSecret`)"),
1635
1635
  configured: z.boolean().describe("값이 저장돼 있는가"),
@@ -1888,7 +1888,7 @@ const orderSummarySchema = z.object({
1888
1888
  totalAmount: z.number().int(),
1889
1889
  representativeStatus: orderItemStatusSchema,
1890
1890
  orderedAt: z.string(),
1891
- testPayment: z.boolean().describe("테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았어요. 상품을 발송하지 않도록 주의하세요")
1891
+ testPayment: z.boolean().describe("테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았습니다. 상품을 발송하지 않도록 주의하십시오")
1892
1892
  });
1893
1893
  const shippingAddressSchema = z.object({
1894
1894
  receiverName: z.string(),
@@ -1928,7 +1928,7 @@ const orderItemSchema = z.object({
1928
1928
  orderedAt: z.string(),
1929
1929
  lastChangedAt: z.string(),
1930
1930
  lastChangedType: changeTypeSchema,
1931
- testPayment: z.boolean().describe("소속 주문이 테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았어요")
1931
+ testPayment: z.boolean().describe("소속 주문이 테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았습니다")
1932
1932
  });
1933
1933
  const orderSchema = z.object({
1934
1934
  orderId: z.string(),
@@ -1957,14 +1957,14 @@ const orderSchema = z.object({
1957
1957
  paidAt: z.string().nullable(),
1958
1958
  cashReceipt: cashReceiptSchema.nullable().optional().default(null).describe("현금영수증. 구매자가 계좌이체·가상계좌 결제에서 신청했을 때만 있고 그 밖에는 null. 서버는 항상 싣는다")
1959
1959
  }),
1960
- testPayment: z.boolean().describe("테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았어요. 상품을 발송하지 않도록 주의하세요"),
1960
+ testPayment: z.boolean().describe("테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았습니다. 상품을 발송하지 않도록 주의하십시오"),
1961
1961
  items: z.array(orderItemSchema)
1962
1962
  });
1963
1963
  /** 주문 목록 응답 — `GET /v1/orders` */
1964
1964
  const orderSummaryPageSchema = pageSchema(orderSummarySchema);
1965
1965
  /** 주문상품 변경 목록 응답 — `GET /v1/order-items` */
1966
1966
  const orderItemPageSchema = pageSchema(orderItemSchema);
1967
- const testPaymentQuery = z.enum(["true", "false"]).optional().describe("테스트 결제(샌드박스 결제) 필터. `true`면 테스트 결제만, `false`면 실결제만, 생략하면 전부예요");
1967
+ const testPaymentQuery = z.enum(["true", "false"]).optional().describe("테스트 결제(샌드박스 결제) 필터. `true`면 테스트 결제만, `false`면 실결제만, 생략하면 전부입니다");
1968
1968
  const pageQuery = { page: z.string().optional().describe("페이지 번호 (1부터, 기본 1)") };
1969
1969
  /**
1970
1970
  * `GET /v1/orders` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열). 검증 규칙은 서버가 적용한다:
@@ -2524,7 +2524,7 @@ const ADDRESS_DESCRIPTIONS = {
2524
2524
  };
2525
2525
  const productCreateRequestSchema = z.object({
2526
2526
  name: z.string().min(1).max(100),
2527
- categoryId: z.string().min(1, "카테고리를 선택해주세요"),
2527
+ categoryId: z.string().min(1, "카테고리를 선택해주십시오"),
2528
2528
  salePrice: z.number().int().min(10).multipleOf(10, "판매가는 10원 단위여야 합니다 (INVALID_PRICE_UNIT)").describe("판매가. 원(KRW) 단위 정수, 최소 10원, 10원 단위"),
2529
2529
  originalPrice: z.number().int().optional().describe("정가(할인 전 표시 가격). 원 단위"),
2530
2530
  description: z.string().optional(),
@@ -3080,7 +3080,7 @@ const RESERVED_STORE_CODES = [
3080
3080
  function isReservedStoreCode(code) {
3081
3081
  return RESERVED_STORE_CODES.includes(code.toLowerCase());
3082
3082
  }
3083
- const storeCodeSchema = z.string().regex(STORE_CODE_PATTERN, "소문자·숫자·하이픈 3~30자여야 하고 하이픈으로 시작하거나 끝날 수 없어요").refine((code) => !isReservedStoreCode(code), "플랫폼이 쓰는 이름이라 스토어 코드로 쓸 수 없어요");
3083
+ const storeCodeSchema = z.string().regex(STORE_CODE_PATTERN, "소문자·숫자·하이픈 3~30자여야 하고 하이픈으로 시작하거나 끝날 수 없습니다").refine((code) => !isReservedStoreCode(code), "플랫폼이 쓰는 이름이라 스토어 코드로 쓸 수 없습니다");
3084
3084
  /** `https://shop.example.com`처럼 경로·쿼리 없는 http(s) 오리진인가 */
3085
3085
  function isWebOrigin(value) {
3086
3086
  try {
@@ -3091,7 +3091,7 @@ function isWebOrigin(value) {
3091
3091
  }
3092
3092
  }
3093
3093
  /** 방문 분석을 보낼 수 있는 스토어프론트 오리진 — 스킴·호스트(·포트)만. 서버가 소문자·끝 슬래시 제거로 정규화한다 */
3094
- const analyticsOriginSchema = z.string().trim().max(255).refine(isWebOrigin, "https://shop.example.com 형식(경로 없이)으로 입력해 주세요").describe("스토어프론트 오리진. 예: `https://shop.example.com`");
3094
+ const analyticsOriginSchema = z.string().trim().max(255).refine(isWebOrigin, "https://shop.example.com 형식(경로 없이)으로 입력해 주십시오").describe("스토어프론트 오리진. 예: `https://shop.example.com`");
3095
3095
  /** 허용 오리진 상한 */
3096
3096
  const MAX_ANALYTICS_ALLOWED_ORIGINS = 20;
3097
3097
  /** 자동 배송완료·자동 구매확정 대기일 상한 */
@@ -3105,7 +3105,7 @@ const policyVersionSchema = z.string().trim().min(1).max(20).describe("약관
3105
3105
  * 약관 문서 주소 — 구매자에게 보여 주는 약관 본문의 주소다. 동의 시점 값이 이력 행에 복사되므로
3106
3106
  * 나중에 주소를 바꿔도 "무엇에 동의했는지"가 남는다. `null`로 지울 수 있다.
3107
3107
  */
3108
- const policyDocumentUrlSchema = z.url().max(500).refine((value) => value.startsWith("https://"), "https 주소만 쓸 수 있어요").nullable();
3108
+ const policyDocumentUrlSchema = z.url().max(500).refine((value) => value.startsWith("https://"), "https 주소만 쓸 수 있습니다").nullable();
3109
3109
  const autoDeliverDaysDescription = "발송 후 자동 배송완료까지의 일수(0~30, 기본 7). 발송(`DISPATCHED`)·배송중(`DELIVERING`) 주문상품을 이 기간이 지나면 배송완료(`DELIVERED`)로 바꾼다. `0`이면 자동 배송완료를 하지 않는다";
3110
3110
  const autoConfirmDaysDescription = "배송완료 후 자동 구매확정까지의 일수(0~30, 기본 7). 배송완료 시점에 구매확정 예정일(`autoDecisionDate`)을 이 값으로 잡고, 그 날짜가 지나면 구매확정(`PURCHASE_DECIDED`)으로 바꾼다. 진행 중인 클레임이 있으면 건너뛴다. `0`이면 자동 구매확정을 하지 않는다";
3111
3111
  /** `PATCH /v1/store` 본문 — 바꿀 필드만 보낸다 */
@@ -4130,9 +4130,9 @@ function createStoreSession(options) {
4130
4130
  async function handleCallback(code, state) {
4131
4131
  const raw = storage.get(STORE_SESSION_KEYS.pkce);
4132
4132
  storage.remove(STORE_SESSION_KEYS.pkce);
4133
- if (!raw) throw new Error("로그인 세션이 만료되었습니다. 다시 시도해주세요");
4133
+ if (!raw) throw new Error("로그인 세션이 만료되었습니다. 다시 시도해주십시오");
4134
4134
  const saved = JSON.parse(raw);
4135
- if (saved.state !== state) throw new Error("state가 일치하지 않습니다. 다시 시도해주세요");
4135
+ if (saved.state !== state) throw new Error("state가 일치하지 않습니다. 다시 시도해주십시오");
4136
4136
  const tokens = await exchangeAuthorizationCode({
4137
4137
  baseUrl,
4138
4138
  clientId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sayren/store-sdk",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "main": "./dist/index.mjs",
5
5
  "types": "./dist/index.d.mts",
6
6
  "exports": {
@@ -12,7 +12,7 @@ export const orderSummarySchema = z.object({
12
12
  testPayment: z
13
13
  .boolean()
14
14
  .describe(
15
- "테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았어요. 상품을 발송하지 않도록 주의하세요",
15
+ "테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았습니다. 상품을 발송하지 않도록 주의하십시오",
16
16
  ),
17
17
  });
18
18
 
@@ -61,7 +61,7 @@ export const orderItemSchema = z.object({
61
61
  testPayment: z
62
62
  .boolean()
63
63
  .describe(
64
- "소속 주문이 테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았어요",
64
+ "소속 주문이 테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았습니다",
65
65
  ),
66
66
  });
67
67
 
@@ -118,7 +118,7 @@ export const orderSchema = z.object({
118
118
  testPayment: z
119
119
  .boolean()
120
120
  .describe(
121
- "테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았어요. 상품을 발송하지 않도록 주의하세요",
121
+ "테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 오가지 않았습니다. 상품을 발송하지 않도록 주의하십시오",
122
122
  ),
123
123
  items: z.array(orderItemSchema),
124
124
  });
@@ -137,7 +137,7 @@ const testPaymentQuery = z
137
137
  .enum(["true", "false"])
138
138
  .optional()
139
139
  .describe(
140
- "테스트 결제(샌드박스 결제) 필터. `true`면 테스트 결제만, `false`면 실결제만, 생략하면 전부예요",
140
+ "테스트 결제(샌드박스 결제) 필터. `true`면 테스트 결제만, `false`면 실결제만, 생략하면 전부입니다",
141
141
  );
142
142
 
143
143
  const pageQuery = {
@@ -59,7 +59,7 @@ export const TOSS_WIDGET_CLIENT_KEY_PATTERN = /^(test|live)_gck_/;
59
59
  /** 토스페이먼츠 결제위젯 시크릿 키 접두사. {@link TOSS_WIDGET_CLIENT_KEY_PATTERN} 참고 */
60
60
  export const TOSS_WIDGET_SECRET_KEY_PATTERN = /^(test|live)_gsk_/;
61
61
  /** 결제위젯 키를 거부할 때의 필드 메시지 */
62
- export const TOSS_WIDGET_KEY_MESSAGE = "결제위젯 키가 아니라 API 개별 연동 키를 입력해주세요";
62
+ export const TOSS_WIDGET_KEY_MESSAGE = "결제위젯 키가 아니라 API 개별 연동 키를 입력해주십시오";
63
63
 
64
64
  export const tossPaymentsCredentialsInputSchema = z
65
65
  .object({
@@ -187,7 +187,7 @@ export const updatePaymentProviderRequestSchema = z
187
187
  body.enabled !== undefined ||
188
188
  body.sandboxMode !== undefined ||
189
189
  body.easyPayProviders !== undefined,
190
- { message: "enabled·sandboxMode·easyPayProviders 중 하나는 보내야 해요" },
190
+ { message: "enabled·sandboxMode·easyPayProviders 중 하나는 보내야 합니다" },
191
191
  );
192
192
  export type UpdatePaymentProviderRequest = z.infer<typeof updatePaymentProviderRequestSchema>;
193
193
 
@@ -221,7 +221,7 @@ export const updatePaymentSettingsRequestSchema = z
221
221
  ),
222
222
  })
223
223
  .refine((body) => body.priority !== undefined || body.checkoutOrigins !== undefined, {
224
- message: "priority 또는 checkoutOrigins 중 하나는 보내야 해요",
224
+ message: "priority 또는 checkoutOrigins 중 하나는 보내야 합니다",
225
225
  });
226
226
  export type UpdatePaymentSettingsRequest = z.infer<typeof updatePaymentSettingsRequestSchema>;
227
227
 
@@ -284,7 +284,7 @@ const ADDRESS_DESCRIPTIONS = {
284
284
  export const productCreateRequestSchema = z
285
285
  .object({
286
286
  name: z.string().min(1).max(100),
287
- categoryId: z.string().min(1, "카테고리를 선택해주세요"),
287
+ categoryId: z.string().min(1, "카테고리를 선택해주십시오"),
288
288
  salePrice: z
289
289
  .number()
290
290
  .int()
@@ -68,11 +68,11 @@ export const storeCodeSchema = z
68
68
  .string()
69
69
  .regex(
70
70
  STORE_CODE_PATTERN,
71
- "소문자·숫자·하이픈 3~30자여야 하고 하이픈으로 시작하거나 끝날 수 없어요",
71
+ "소문자·숫자·하이픈 3~30자여야 하고 하이픈으로 시작하거나 끝날 수 없습니다",
72
72
  )
73
73
  .refine(
74
74
  (code) => !isReservedStoreCode(code),
75
- "플랫폼이 쓰는 이름이라 스토어 코드로 쓸 수 없어요",
75
+ "플랫폼이 쓰는 이름이라 스토어 코드로 쓸 수 없습니다",
76
76
  );
77
77
 
78
78
  /** `https://shop.example.com`처럼 경로·쿼리 없는 http(s) 오리진인가 */
@@ -98,7 +98,7 @@ export const analyticsOriginSchema = z
98
98
  .string()
99
99
  .trim()
100
100
  .max(255)
101
- .refine(isWebOrigin, "https://shop.example.com 형식(경로 없이)으로 입력해 주세요")
101
+ .refine(isWebOrigin, "https://shop.example.com 형식(경로 없이)으로 입력해 주십시오")
102
102
  .describe("스토어프론트 오리진. 예: `https://shop.example.com`");
103
103
 
104
104
  /** 허용 오리진 상한 */
@@ -125,7 +125,7 @@ export const policyVersionSchema = z
125
125
  export const policyDocumentUrlSchema = z
126
126
  .url()
127
127
  .max(500)
128
- .refine((value) => value.startsWith("https://"), "https 주소만 쓸 수 있어요")
128
+ .refine((value) => value.startsWith("https://"), "https 주소만 쓸 수 있습니다")
129
129
  .nullable();
130
130
 
131
131
  const autoDeliverDaysDescription =
package/src/session.ts CHANGED
@@ -203,10 +203,10 @@ export function createStoreSession(options: StoreSessionOptions): StoreSession {
203
203
  async function handleCallback(code: string, state: string): Promise<void> {
204
204
  const raw = storage.get(STORE_SESSION_KEYS.pkce);
205
205
  storage.remove(STORE_SESSION_KEYS.pkce); // 1회용
206
- if (!raw) throw new Error("로그인 세션이 만료되었습니다. 다시 시도해주세요");
206
+ if (!raw) throw new Error("로그인 세션이 만료되었습니다. 다시 시도해주십시오");
207
207
  const saved = JSON.parse(raw) as PkceBlob;
208
208
  if (saved.state !== state) {
209
- throw new Error("state가 일치하지 않습니다. 다시 시도해주세요");
209
+ throw new Error("state가 일치하지 않습니다. 다시 시도해주십시오");
210
210
  }
211
211
  const tokens = await exchangeAuthorizationCode({
212
212
  baseUrl,