@sayren/store-sdk 0.34.0 → 0.36.0

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
@@ -5610,6 +5610,27 @@ export declare const categoryDeleteQuerySchema: z.ZodObject<{
5610
5610
  cascade: "cascade";
5611
5611
  }>>;
5612
5612
  }, z.core.$strip>;
5613
+ /**
5614
+ * 카테고리 번역 (이슈 #134) — 언어 하나의 이름·SEO. 카테고리 필드(`name`·`meta*`)는 상점 기본 언어 값이고 번역 레코드가 언어별 값이다.
5615
+ * 비운 칸(null)은 스토어프론트가 기본 언어 값으로 대체한다(칸 단위 대체).
5616
+ */
5617
+ export declare const categoryLocalizationSchema: z.ZodObject<{
5618
+ locale: z.ZodString;
5619
+ name: z.ZodNullable<z.ZodString>;
5620
+ metaTitle: z.ZodNullable<z.ZodString>;
5621
+ metaDescription: z.ZodNullable<z.ZodString>;
5622
+ metaKeywords: z.ZodNullable<z.ZodString>;
5623
+ updatedAt: z.ZodString;
5624
+ }, z.core.$strip>;
5625
+ export type CategoryLocalization = z.infer<typeof categoryLocalizationSchema>;
5626
+ /** `PUT /v1/categories/{categoryId}/localizations/{locale}` 본문 — 레코드 전체를 바꾼다. 빠진 칸은 null(기본 언어 값으로 대체)이다 */
5627
+ export declare const categoryLocalizationRequestSchema: z.ZodObject<{
5628
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5629
+ metaTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5630
+ metaDescription: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5631
+ metaKeywords: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5632
+ }, z.core.$strict>;
5633
+ export type CategoryLocalizationRequest = z.infer<typeof categoryLocalizationRequestSchema>;
5613
5634
  //#endregion
5614
5635
  //#region src/schemas/common.d.ts
5615
5636
  export declare const pageInfoSchema: z.ZodObject<{
@@ -6428,6 +6449,27 @@ export declare const collectionPreviewSchema: z.ZodObject<{
6428
6449
  salesComputedAt: z.ZodDefault<z.ZodNullable<z.ZodString>>;
6429
6450
  }, z.core.$strip>;
6430
6451
  export type CollectionPreview = z.infer<typeof collectionPreviewSchema>;
6452
+ /**
6453
+ * 컬렉션 번역 (이슈 #134) — 언어 하나의 제목·설명·SEO. 컬렉션 필드는 상점 기본 언어 값이고 번역 레코드가 언어별 값이다.
6454
+ * 비운 칸(null)은 스토어프론트가 기본 언어 값으로 대체한다(칸 단위 대체).
6455
+ */
6456
+ export declare const collectionLocalizationSchema: z.ZodObject<{
6457
+ locale: z.ZodString;
6458
+ title: z.ZodNullable<z.ZodString>;
6459
+ description: z.ZodNullable<z.ZodString>;
6460
+ metaTitle: z.ZodNullable<z.ZodString>;
6461
+ metaDescription: z.ZodNullable<z.ZodString>;
6462
+ updatedAt: z.ZodString;
6463
+ }, z.core.$strip>;
6464
+ export type CollectionLocalization = z.infer<typeof collectionLocalizationSchema>;
6465
+ /** `PUT /v1/collections/{collectionId}/localizations/{locale}` 본문 — 레코드 전체를 바꾼다. 빠진 칸은 null(기본 언어 값으로 대체)이다 */
6466
+ export declare const collectionLocalizationRequestSchema: z.ZodObject<{
6467
+ title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6468
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6469
+ metaTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6470
+ metaDescription: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6471
+ }, z.core.$strict>;
6472
+ export type CollectionLocalizationRequest = z.infer<typeof collectionLocalizationRequestSchema>;
6431
6473
  //#endregion
6432
6474
  //#region src/schemas/commerce-flow.d.ts
6433
6475
  /**
@@ -8123,6 +8165,7 @@ export declare const marketSchema: z.ZodObject<{
8123
8165
  couponsEnabled: z.ZodBoolean;
8124
8166
  pointsEnabled: z.ZodBoolean;
8125
8167
  archivedAt: z.ZodNullable<z.ZodString>;
8168
+ locales: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
8126
8169
  }, z.core.$strip>;
8127
8170
  export type Market = z.infer<typeof marketSchema>;
8128
8171
  export declare const createMarketRequestSchema: z.ZodObject<{
@@ -8149,6 +8192,7 @@ export declare const createMarketRequestSchema: z.ZodObject<{
8149
8192
  domains: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>>;
8150
8193
  couponsEnabled: z.ZodOptional<z.ZodBoolean>;
8151
8194
  pointsEnabled: z.ZodOptional<z.ZodBoolean>;
8195
+ locales: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>>;
8152
8196
  }, z.core.$strict>;
8153
8197
  export type CreateMarketRequest = z.infer<typeof createMarketRequestSchema>;
8154
8198
  export type CreateMarketRequestInput = z.input<typeof createMarketRequestSchema>;
@@ -8158,6 +8202,7 @@ export declare const updateMarketRequestSchema: z.ZodObject<{
8158
8202
  domains: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>>;
8159
8203
  couponsEnabled: z.ZodOptional<z.ZodBoolean>;
8160
8204
  pointsEnabled: z.ZodOptional<z.ZodBoolean>;
8205
+ locales: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>>;
8161
8206
  }, z.core.$strict>;
8162
8207
  export type UpdateMarketRequest = z.infer<typeof updateMarketRequestSchema>;
8163
8208
  export type UpdateMarketRequestInput = z.input<typeof updateMarketRequestSchema>;
@@ -9050,6 +9095,7 @@ export declare const orderSchema: z.ZodObject<{
9050
9095
  }, z.core.$strip>;
9051
9096
  currency: z.ZodOptional<z.ZodString>;
9052
9097
  testPayment: z.ZodBoolean;
9098
+ locale: z.ZodOptional<z.ZodNullable<z.ZodString>>;
9053
9099
  items: z.ZodArray<z.ZodObject<{
9054
9100
  orderItemId: z.ZodString;
9055
9101
  orderItemNo: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
@@ -9320,7 +9366,7 @@ export declare const orderItemPageSchema: z.ZodObject<{
9320
9366
  export type OrderItemPage = z.infer<typeof orderItemPageSchema>;
9321
9367
  /**
9322
9368
  * `GET /v1/orders` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열). 검증 규칙은 서버가 적용한다:
9323
- * `orderNo` 없이 `orderedFrom` 누락 400 `MISSING_PARAMETER`, 날짜·`orderNo` 형식 오류 400 `INVALID_PARAMETER`, 31일 초과 400 `RANGE_TOO_WIDE`,
9369
+ * `orderNo` 없이 `orderedFrom` 누락 400 `MISSING_PARAMETER`, 날짜·`orderNo` 형식 오류 400 `INVALID_PARAMETER`, 366일 초과 400 `RANGE_TOO_WIDE`,
9324
9370
  * `testPayment`가 `true`·`false`가 아니면 400 `INVALID_PARAMETER`
9325
9371
  */
9326
9372
  export declare const orderListQuerySchema: z.ZodObject<{
@@ -11367,6 +11413,10 @@ export declare const productSummarySchema: z.ZodObject<{
11367
11413
  }, z.core.$strip>;
11368
11414
  updatedAt: z.ZodString;
11369
11415
  sample: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
11416
+ localizations: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
11417
+ locale: z.ZodString;
11418
+ needsTranslation: z.ZodBoolean;
11419
+ }, z.core.$strip>>>>;
11370
11420
  }, z.core.$strip>;
11371
11421
  export type ProductSummary = z.infer<typeof productSummarySchema>;
11372
11422
  /** 옵션 축(그룹)이 가지는 값 하나 — 예: 축 "색상"의 값 "블랙" */
@@ -11612,20 +11662,20 @@ export declare const discountSchema: z.ZodObject<{
11612
11662
  }, z.core.$strip>;
11613
11663
  export type Discount = z.infer<typeof discountSchema>;
11614
11664
  export declare const productSchema: z.ZodObject<{
11615
- productId: z.ZodString;
11616
- productNo: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
11617
- name: z.ZodString;
11665
+ salePrice: z.ZodNumber;
11618
11666
  status: z.ZodEnum<{
11619
11667
  SALE: "SALE";
11620
11668
  SUSPENDED: "SUSPENDED";
11621
11669
  OUT_OF_STOCK: "OUT_OF_STOCK";
11622
11670
  CLOSED: "CLOSED";
11623
11671
  }>;
11624
- salePrice: z.ZodNumber;
11625
- discountedPrice: z.ZodNullable<z.ZodNumber>;
11672
+ name: z.ZodString;
11626
11673
  stockQuantity: z.ZodNumber;
11627
11674
  categoryId: z.ZodNullable<z.ZodString>;
11675
+ productId: z.ZodString;
11628
11676
  thumbnailUrl: z.ZodOptional<z.ZodURL>;
11677
+ productNo: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
11678
+ discountedPrice: z.ZodNullable<z.ZodNumber>;
11629
11679
  hasOptions: z.ZodBoolean;
11630
11680
  updatedAt: z.ZodString;
11631
11681
  sample: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
@@ -12672,9 +12722,9 @@ export type ProductPatchRequest = z.infer<typeof productPatchRequestSchema>;
12672
12722
  export declare const productSortSchema: z.ZodEnum<{
12673
12723
  "createdAt.desc": "createdAt.desc";
12674
12724
  "createdAt.asc": "createdAt.asc";
12675
- "updatedAt.desc": "updatedAt.desc";
12676
12725
  "salePrice.asc": "salePrice.asc";
12677
12726
  "salePrice.desc": "salePrice.desc";
12727
+ "updatedAt.desc": "updatedAt.desc";
12678
12728
  }>;
12679
12729
  export type ProductSort = z.infer<typeof productSortSchema>;
12680
12730
  export interface ProductListParams extends PageParams {
@@ -12703,9 +12753,9 @@ export declare const productListQuerySchema: z.ZodObject<{
12703
12753
  sort: z.ZodOptional<z.ZodEnum<{
12704
12754
  "createdAt.desc": "createdAt.desc";
12705
12755
  "createdAt.asc": "createdAt.asc";
12706
- "updatedAt.desc": "updatedAt.desc";
12707
12756
  "salePrice.asc": "salePrice.asc";
12708
12757
  "salePrice.desc": "salePrice.desc";
12758
+ "updatedAt.desc": "updatedAt.desc";
12709
12759
  }>>;
12710
12760
  }, z.core.$strip>;
12711
12761
  export declare const discountRequestSchema: z.ZodObject<{
@@ -12859,6 +12909,113 @@ export declare const infoSectionRequestSchema: z.ZodObject<{
12859
12909
  }, z.core.$strip>;
12860
12910
  export type InfoSectionRequest = z.infer<typeof infoSectionRequestSchema>;
12861
12911
  export type InfoSectionRequestInput = z.input<typeof infoSectionRequestSchema>;
12912
+ /**
12913
+ * 안내 섹션 번역 (이슈 #134) — 언어 하나의 제목·본문. 섹션 필드는 상점 기본 언어 값이다. 비운 칸(null)은 스토어프론트가 기본 언어 값으로 대체한다.
12914
+ * 섹션을 연결한 모든 상품이 같은 번역을 보인다.
12915
+ */
12916
+ export declare const infoSectionLocalizationSchema: z.ZodObject<{
12917
+ locale: z.ZodString;
12918
+ title: z.ZodNullable<z.ZodString>;
12919
+ body: z.ZodNullable<z.ZodString>;
12920
+ bodyJson: z.ZodNullable<z.ZodString>;
12921
+ updatedAt: z.ZodString;
12922
+ }, z.core.$strip>;
12923
+ export type InfoSectionLocalization = z.infer<typeof infoSectionLocalizationSchema>;
12924
+ /** `PUT /v1/info-sections/{infoSectionId}/localizations/{locale}` 본문 — 레코드 전체를 바꾼다. 빠진 칸은 null이다 */
12925
+ export declare const infoSectionLocalizationRequestSchema: z.ZodObject<{
12926
+ title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12927
+ body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12928
+ bodyJson: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12929
+ }, z.core.$strict>;
12930
+ export type InfoSectionLocalizationRequest = z.infer<typeof infoSectionLocalizationRequestSchema>;
12931
+ //#endregion
12932
+ //#region src/schemas/product-localization.d.ts
12933
+ /**
12934
+ * 조회 응답 — 지금 상품의 옵션명·값·직접 입력 항목, 셀러가 적은 고시 칸을 모두 싣고 번역하지 않은 칸은 null이다.
12935
+ * `optionGroups`는 조합 옵션, `addonGroups`는 추가 선택이다(상품 응답과 같은 구분)
12936
+ */
12937
+ export declare const productLocalizationSchema: z.ZodObject<{
12938
+ locale: z.ZodString;
12939
+ name: z.ZodNullable<z.ZodString>;
12940
+ description: z.ZodNullable<z.ZodString>;
12941
+ descriptionJson: z.ZodNullable<z.ZodString>;
12942
+ images: z.ZodNullable<z.ZodArray<z.ZodString>>;
12943
+ optionGroups: z.ZodArray<z.ZodObject<{
12944
+ groupId: z.ZodString;
12945
+ name: z.ZodNullable<z.ZodString>;
12946
+ values: z.ZodArray<z.ZodObject<{
12947
+ valueId: z.ZodString;
12948
+ name: z.ZodNullable<z.ZodString>;
12949
+ }, z.core.$strip>>;
12950
+ }, z.core.$strip>>;
12951
+ addonGroups: z.ZodArray<z.ZodObject<{
12952
+ groupId: z.ZodString;
12953
+ name: z.ZodNullable<z.ZodString>;
12954
+ values: z.ZodArray<z.ZodObject<{
12955
+ valueId: z.ZodString;
12956
+ name: z.ZodNullable<z.ZodString>;
12957
+ }, z.core.$strip>>;
12958
+ }, z.core.$strip>>;
12959
+ customInputs: z.ZodArray<z.ZodObject<{
12960
+ inputId: z.ZodString;
12961
+ label: z.ZodNullable<z.ZodString>;
12962
+ placeholder: z.ZodNullable<z.ZodString>;
12963
+ }, z.core.$strip>>;
12964
+ notice: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
12965
+ key: z.ZodString;
12966
+ label: z.ZodString;
12967
+ value: z.ZodNullable<z.ZodString>;
12968
+ }, z.core.$strip>>>>;
12969
+ updatedAt: z.ZodString;
12970
+ }, z.core.$strip>;
12971
+ export type ProductLocalization = z.infer<typeof productLocalizationSchema>;
12972
+ /**
12973
+ * `PUT /v1/products/{productId}/localizations/{locale}` 본문 — 레코드 전체를 바꾼다. 빠진 칸은 null(기본 언어 값으로 대체)이다.
12974
+ * 옵션은 번역할 id만 보낸다. 상품에 없는 id는 400 `PRODUCT_LOCALIZATION_TARGET_NOT_FOUND`다.
12975
+ * 번역한 옵션명·값 이름도 기본 언어와 같은 규칙(대소문자·앞뒤 공백 무시 유일)이고 겹치면 400 `INVALID_OPTION_MODEL`이다
12976
+ */
12977
+ export declare const productLocalizationRequestSchema: z.ZodObject<{
12978
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12979
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12980
+ descriptionJson: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12981
+ images: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodURL>>>;
12982
+ optionGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
12983
+ groupId: z.ZodString;
12984
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12985
+ values: z.ZodOptional<z.ZodArray<z.ZodObject<{
12986
+ valueId: z.ZodString;
12987
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12988
+ }, z.core.$strict>>>;
12989
+ }, z.core.$strict>>>;
12990
+ addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
12991
+ groupId: z.ZodString;
12992
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12993
+ values: z.ZodOptional<z.ZodArray<z.ZodObject<{
12994
+ valueId: z.ZodString;
12995
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12996
+ }, z.core.$strict>>>;
12997
+ }, z.core.$strict>>>;
12998
+ customInputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
12999
+ inputId: z.ZodString;
13000
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13001
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13002
+ }, z.core.$strict>>>;
13003
+ notice: z.ZodOptional<z.ZodArray<z.ZodObject<{
13004
+ key: z.ZodString;
13005
+ value: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13006
+ }, z.core.$strict>>>;
13007
+ }, z.core.$strict>;
13008
+ export type ProductLocalizationRequest = z.infer<typeof productLocalizationRequestSchema>;
13009
+ /**
13010
+ * 번역할 칸이 비었는가(이슈 #134, 2026-10-18 결정: 완성도 대신 「번역 필요」 표시만) — 상품명, 기본 언어에 본문이 있는 상세설명,
13011
+ * 옵션명·값·직접 입력 항목명, 셀러가 적은 고시 칸. 이미지·입력 안내는 기본 언어 값을 그대로 써도 되는 칸이라 세지 않는다.
13012
+ * 상점 플랫폼(상품 수정·목록)과 관리 목록 응답이 같은 함수다
13013
+ */
13014
+ export declare function productLocalizationNeedsTranslation(localization: Pick<ProductLocalization, "name" | "description" | "optionGroups" | "addonGroups" | "customInputs"> & {
13015
+ notice?: ProductLocalization["notice"];
13016
+ }, base: {
13017
+ description?: string | null;
13018
+ }): boolean;
12862
13019
  //#endregion
12863
13020
  //#region src/schemas/saved-option-set.d.ts
12864
13021
  /**
@@ -13092,6 +13249,49 @@ export declare const savedOptionSetListQuerySchema: z.ZodObject<{
13092
13249
  "importedProductCount.desc": "importedProductCount.desc";
13093
13250
  }>>;
13094
13251
  }, z.core.$strip>;
13252
+ /**
13253
+ * 저장 옵션 번역 (이슈 #134) — 저장 옵션에는 id가 없어 **기본 언어 이름이 키**다(`baseName`·`baseLabel`).
13254
+ * 상품이 불러올 때 상품 번역으로 함께 복사하고(상품 저장 트랜잭션), 그 뒤로는 상품 번역이 원천이다 — 저장 옵션 번역을 고쳐도
13255
+ * 이미 불러온 상품은 그대로다. 기본 언어 이름을 바꾸면 그 이름의 번역은 읽지 않는다.
13256
+ */
13257
+ export declare const savedOptionSetLocalizationSchema: z.ZodObject<{
13258
+ locale: z.ZodString;
13259
+ groups: z.ZodArray<z.ZodObject<{
13260
+ baseName: z.ZodString;
13261
+ name: z.ZodNullable<z.ZodString>;
13262
+ values: z.ZodArray<z.ZodObject<{
13263
+ baseName: z.ZodString;
13264
+ name: z.ZodNullable<z.ZodString>;
13265
+ }, z.core.$strip>>;
13266
+ }, z.core.$strip>>;
13267
+ customInputs: z.ZodArray<z.ZodObject<{
13268
+ baseLabel: z.ZodString;
13269
+ label: z.ZodNullable<z.ZodString>;
13270
+ placeholder: z.ZodNullable<z.ZodString>;
13271
+ }, z.core.$strip>>;
13272
+ updatedAt: z.ZodString;
13273
+ }, z.core.$strip>;
13274
+ export type SavedOptionSetLocalization = z.infer<typeof savedOptionSetLocalizationSchema>;
13275
+ /**
13276
+ * `PUT /v1/saved-option-sets/{optionSetId}/localizations/{locale}` 본문 — 레코드 전체를 바꾼다. 번역할 이름만 보낸다.
13277
+ * 저장 옵션에 없는 기본 언어 이름은 400 `OPTION_SET_LOCALIZATION_TARGET_NOT_FOUND`, 번역 이름 중복은 상품과 같은 규칙으로 400 `INVALID_OPTION_MODEL`이다
13278
+ */
13279
+ export declare const savedOptionSetLocalizationRequestSchema: z.ZodObject<{
13280
+ groups: z.ZodOptional<z.ZodArray<z.ZodObject<{
13281
+ baseName: z.ZodString;
13282
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13283
+ values: z.ZodOptional<z.ZodArray<z.ZodObject<{
13284
+ baseName: z.ZodString;
13285
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13286
+ }, z.core.$strict>>>;
13287
+ }, z.core.$strict>>>;
13288
+ customInputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
13289
+ baseLabel: z.ZodString;
13290
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13291
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13292
+ }, z.core.$strict>>>;
13293
+ }, z.core.$strict>;
13294
+ export type SavedOptionSetLocalizationRequest = z.infer<typeof savedOptionSetLocalizationRequestSchema>;
13095
13295
  //#endregion
13096
13296
  //#region src/schemas/stay.d.ts
13097
13297
  /**
@@ -13292,6 +13492,7 @@ export declare const updateStoreRequestSchema: z.ZodObject<{
13292
13492
  privacyVersion: z.ZodOptional<z.ZodString>;
13293
13493
  termsUrl: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
13294
13494
  privacyUrl: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
13495
+ defaultLocale: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
13295
13496
  businessName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13296
13497
  representativeName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13297
13498
  businessNumber: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -13376,6 +13577,7 @@ export declare const storeSchema: z.ZodObject<{
13376
13577
  termsUrl: z.ZodNullable<z.ZodString>;
13377
13578
  privacyUrl: z.ZodNullable<z.ZodString>;
13378
13579
  memberCount: z.ZodNumber;
13580
+ defaultLocale: z.ZodDefault<z.ZodOptional<z.ZodString>>;
13379
13581
  createdAt: z.ZodString;
13380
13582
  businessName: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
13381
13583
  representativeName: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
@@ -15251,18 +15453,22 @@ export declare function createStoreClient(options: StoreClientOptions): {
15251
15453
  };
15252
15454
  updatedAt: string;
15253
15455
  sample: boolean;
15456
+ localizations: {
15457
+ locale: string;
15458
+ needsTranslation: boolean;
15459
+ }[];
15254
15460
  thumbnailUrl?: string | undefined;
15255
15461
  }[];
15256
15462
  }>;
15257
15463
  get: (productId: string) => Promise<{
15258
- productId: string;
15259
- productNo: number | null;
15260
- name: string;
15261
- status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
15262
15464
  salePrice: number;
15263
- discountedPrice: number | null;
15465
+ status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
15466
+ name: string;
15264
15467
  stockQuantity: number;
15265
15468
  categoryId: string | null;
15469
+ productId: string;
15470
+ productNo: number | null;
15471
+ discountedPrice: number | null;
15266
15472
  hasOptions: boolean;
15267
15473
  updatedAt: string;
15268
15474
  sample: boolean;
@@ -15404,14 +15610,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
15404
15610
  createdAt?: string | undefined;
15405
15611
  }>;
15406
15612
  create: (body: ProductCreateRequestInput, idempotencyKey?: string) => Promise<{
15407
- productId: string;
15408
- productNo: number | null;
15409
- name: string;
15410
- status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
15411
15613
  salePrice: number;
15412
- discountedPrice: number | null;
15614
+ status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
15615
+ name: string;
15413
15616
  stockQuantity: number;
15414
15617
  categoryId: string | null;
15618
+ productId: string;
15619
+ productNo: number | null;
15620
+ discountedPrice: number | null;
15415
15621
  hasOptions: boolean;
15416
15622
  updatedAt: string;
15417
15623
  sample: boolean;
@@ -15553,14 +15759,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
15553
15759
  createdAt?: string | undefined;
15554
15760
  }>;
15555
15761
  update: (productId: string, body: ProductReplaceRequestInput) => Promise<{
15556
- productId: string;
15557
- productNo: number | null;
15558
- name: string;
15559
- status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
15560
15762
  salePrice: number;
15561
- discountedPrice: number | null;
15763
+ status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
15764
+ name: string;
15562
15765
  stockQuantity: number;
15563
15766
  categoryId: string | null;
15767
+ productId: string;
15768
+ productNo: number | null;
15769
+ discountedPrice: number | null;
15564
15770
  hasOptions: boolean;
15565
15771
  updatedAt: string;
15566
15772
  sample: boolean;
@@ -15703,6 +15909,78 @@ export declare function createStoreClient(options: StoreClientOptions): {
15703
15909
  }>;
15704
15910
  patch: (productId: string, body: ProductPatchRequest) => Promise<void>;
15705
15911
  remove: (productId: string) => Promise<void>;
15912
+ /** 번역(이슈 #134) — 언어별 상품명·상세설명·이미지·옵션 이름 */
15913
+ localizations: {
15914
+ list: (productId: string) => Promise<{
15915
+ locale: string;
15916
+ name: string | null;
15917
+ description: string | null;
15918
+ descriptionJson: string | null;
15919
+ images: string[] | null;
15920
+ optionGroups: {
15921
+ groupId: string;
15922
+ name: string | null;
15923
+ values: {
15924
+ valueId: string;
15925
+ name: string | null;
15926
+ }[];
15927
+ }[];
15928
+ addonGroups: {
15929
+ groupId: string;
15930
+ name: string | null;
15931
+ values: {
15932
+ valueId: string;
15933
+ name: string | null;
15934
+ }[];
15935
+ }[];
15936
+ customInputs: {
15937
+ inputId: string;
15938
+ label: string | null;
15939
+ placeholder: string | null;
15940
+ }[];
15941
+ notice: {
15942
+ key: string;
15943
+ label: string;
15944
+ value: string | null;
15945
+ }[];
15946
+ updatedAt: string;
15947
+ }[]>;
15948
+ put: (productId: string, locale: string, body: ProductLocalizationRequest) => Promise<{
15949
+ locale: string;
15950
+ name: string | null;
15951
+ description: string | null;
15952
+ descriptionJson: string | null;
15953
+ images: string[] | null;
15954
+ optionGroups: {
15955
+ groupId: string;
15956
+ name: string | null;
15957
+ values: {
15958
+ valueId: string;
15959
+ name: string | null;
15960
+ }[];
15961
+ }[];
15962
+ addonGroups: {
15963
+ groupId: string;
15964
+ name: string | null;
15965
+ values: {
15966
+ valueId: string;
15967
+ name: string | null;
15968
+ }[];
15969
+ }[];
15970
+ customInputs: {
15971
+ inputId: string;
15972
+ label: string | null;
15973
+ placeholder: string | null;
15974
+ }[];
15975
+ notice: {
15976
+ key: string;
15977
+ label: string;
15978
+ value: string | null;
15979
+ }[];
15980
+ updatedAt: string;
15981
+ }>;
15982
+ remove: (productId: string, locale: string) => Promise<void>;
15983
+ };
15706
15984
  bulkUpdateStatus: (productIds: string[], status: ProductStatus, idempotencyKey?: string) => Promise<{
15707
15985
  succeeded: string[];
15708
15986
  failed: {
@@ -16024,6 +16302,44 @@ export declare function createStoreClient(options: StoreClientOptions): {
16024
16302
  };
16025
16303
  additionalPriceDropped: boolean;
16026
16304
  }>;
16305
+ /** 번역(이슈 #134) — 기본 언어 이름이 키다. 불러올 때 상품 번역으로 복사한다 */
16306
+ localizations: {
16307
+ list: (optionSetId: string) => Promise<{
16308
+ locale: string;
16309
+ groups: {
16310
+ baseName: string;
16311
+ name: string | null;
16312
+ values: {
16313
+ baseName: string;
16314
+ name: string | null;
16315
+ }[];
16316
+ }[];
16317
+ customInputs: {
16318
+ baseLabel: string;
16319
+ label: string | null;
16320
+ placeholder: string | null;
16321
+ }[];
16322
+ updatedAt: string;
16323
+ }[]>;
16324
+ put: (optionSetId: string, locale: string, body: SavedOptionSetLocalizationRequest) => Promise<{
16325
+ locale: string;
16326
+ groups: {
16327
+ baseName: string;
16328
+ name: string | null;
16329
+ values: {
16330
+ baseName: string;
16331
+ name: string | null;
16332
+ }[];
16333
+ }[];
16334
+ customInputs: {
16335
+ baseLabel: string;
16336
+ label: string | null;
16337
+ placeholder: string | null;
16338
+ }[];
16339
+ updatedAt: string;
16340
+ }>;
16341
+ remove: (optionSetId: string, locale: string) => Promise<void>;
16342
+ };
16027
16343
  };
16028
16344
  /**
16029
16345
  * 상품정보제공 고시 품목군(이슈 #135) — 플랫폼 코드 표. 현재 버전만 싣는다. 권한은 상품 조회(`product:r`)다
@@ -16102,6 +16418,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
16102
16418
  updatedAt: string;
16103
16419
  }>;
16104
16420
  remove: (infoSectionId: string) => Promise<void>;
16421
+ /** 번역(이슈 #134) — 언어별 제목·본문 */
16422
+ localizations: {
16423
+ list: (infoSectionId: string) => Promise<{
16424
+ locale: string;
16425
+ title: string | null;
16426
+ body: string | null;
16427
+ bodyJson: string | null;
16428
+ updatedAt: string;
16429
+ }[]>;
16430
+ put: (infoSectionId: string, locale: string, body: InfoSectionLocalizationRequest) => Promise<{
16431
+ locale: string;
16432
+ title: string | null;
16433
+ body: string | null;
16434
+ bodyJson: string | null;
16435
+ updatedAt: string;
16436
+ }>;
16437
+ remove: (infoSectionId: string, locale: string) => Promise<void>;
16438
+ };
16105
16439
  };
16106
16440
  /**
16107
16441
  * 컬렉션 (이슈 #83) — 상품을 어디에 보여 줄지 정하는 묶음(다대다). 권한은 카테고리와 같다(`category:r`·`category:rw`).
@@ -16411,6 +16745,26 @@ export declare function createStoreClient(options: StoreClientOptions): {
16411
16745
  }[];
16412
16746
  salesComputedAt: string | null;
16413
16747
  }>;
16748
+ /** 번역(이슈 #134) — 언어별 제목·설명·SEO */
16749
+ localizations: {
16750
+ list: (collectionId: string) => Promise<{
16751
+ locale: string;
16752
+ title: string | null;
16753
+ description: string | null;
16754
+ metaTitle: string | null;
16755
+ metaDescription: string | null;
16756
+ updatedAt: string;
16757
+ }[]>;
16758
+ put: (collectionId: string, locale: string, body: CollectionLocalizationRequest) => Promise<{
16759
+ locale: string;
16760
+ title: string | null;
16761
+ description: string | null;
16762
+ metaTitle: string | null;
16763
+ metaDescription: string | null;
16764
+ updatedAt: string;
16765
+ }>;
16766
+ remove: (collectionId: string, locale: string) => Promise<void>;
16767
+ };
16414
16768
  };
16415
16769
  categories: {
16416
16770
  list: (params?: {
@@ -16571,6 +16925,26 @@ export declare function createStoreClient(options: StoreClientOptions): {
16571
16925
  remove: (categoryId: string, opts?: {
16572
16926
  strategy?: CategoryDeleteStrategy;
16573
16927
  }) => Promise<void>;
16928
+ /** 번역(이슈 #134) — 언어별 이름·SEO */
16929
+ localizations: {
16930
+ list: (categoryId: string) => Promise<{
16931
+ locale: string;
16932
+ name: string | null;
16933
+ metaTitle: string | null;
16934
+ metaDescription: string | null;
16935
+ metaKeywords: string | null;
16936
+ updatedAt: string;
16937
+ }[]>;
16938
+ put: (categoryId: string, locale: string, body: CategoryLocalizationRequest) => Promise<{
16939
+ locale: string;
16940
+ name: string | null;
16941
+ metaTitle: string | null;
16942
+ metaDescription: string | null;
16943
+ metaKeywords: string | null;
16944
+ updatedAt: string;
16945
+ }>;
16946
+ remove: (categoryId: string, locale: string) => Promise<void>;
16947
+ };
16574
16948
  };
16575
16949
  orders: {
16576
16950
  /**
@@ -16740,6 +17114,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
16740
17114
  }[];
16741
17115
  progressStatus?: "PAID" | "CANCELED" | "PAYMENT_WAITING" | "CONFIRMED" | "DISPATCHED" | "DELIVERING" | "DELIVERED" | "PURCHASE_DECIDED" | undefined;
16742
17116
  currency?: string | undefined;
17117
+ locale?: string | null | undefined;
16743
17118
  }>;
16744
17119
  /**
16745
17120
  * `POST /v1/orders/{orderId}/cash-receipt/reissue` — 실패했거나 재시도 대기 중인 현금영수증을 지금 다시 발급·취소한다.
@@ -21987,6 +22362,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
21987
22362
  couponsEnabled: boolean;
21988
22363
  pointsEnabled: boolean;
21989
22364
  archivedAt: string | null;
22365
+ locales: string[];
21990
22366
  }[]>;
21991
22367
  get: (marketId: string) => Promise<{
21992
22368
  marketId: string;
@@ -21998,6 +22374,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
21998
22374
  couponsEnabled: boolean;
21999
22375
  pointsEnabled: boolean;
22000
22376
  archivedAt: string | null;
22377
+ locales: string[];
22001
22378
  }>;
22002
22379
  create: (body: CreateMarketRequestInput) => Promise<{
22003
22380
  marketId: string;
@@ -22009,6 +22386,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
22009
22386
  couponsEnabled: boolean;
22010
22387
  pointsEnabled: boolean;
22011
22388
  archivedAt: string | null;
22389
+ locales: string[];
22012
22390
  }>;
22013
22391
  update: (marketId: string, body: UpdateMarketRequestInput) => Promise<{
22014
22392
  marketId: string;
@@ -22020,6 +22398,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
22020
22398
  couponsEnabled: boolean;
22021
22399
  pointsEnabled: boolean;
22022
22400
  archivedAt: string | null;
22401
+ locales: string[];
22023
22402
  }>;
22024
22403
  archive: (marketId: string) => Promise<void>;
22025
22404
  };
@@ -23621,6 +24000,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
23621
24000
  termsUrl: string | null;
23622
24001
  privacyUrl: string | null;
23623
24002
  memberCount: number;
24003
+ defaultLocale: string;
23624
24004
  createdAt: string;
23625
24005
  businessName: string | null;
23626
24006
  representativeName: string | null;
@@ -23678,6 +24058,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
23678
24058
  termsUrl: string | null;
23679
24059
  privacyUrl: string | null;
23680
24060
  memberCount: number;
24061
+ defaultLocale: string;
23681
24062
  createdAt: string;
23682
24063
  businessName: string | null;
23683
24064
  representativeName: string | null;
@@ -24277,6 +24658,12 @@ export declare const customerDelegationSchema: z.ZodObject<{
24277
24658
  }, z.core.$strip>;
24278
24659
  export type CustomerDelegation = z.infer<typeof customerDelegationSchema>;
24279
24660
  //#endregion
24661
+ //#region src/schemas/locale.d.ts
24662
+ export declare function normalizeLocale(value: string | null | undefined): string | null;
24663
+ /** 상점 기본 언어 — 옛 상점과 언어를 정하지 않은 상점의 값이다 */
24664
+ export declare const DEFAULT_STORE_LOCALE = "ko";
24665
+ export declare const localeCodeSchema: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
24666
+ //#endregion
24280
24667
  //#region src/schemas/promotion.d.ts
24281
24668
  /** 쿠폰 종류 */
24282
24669
  export declare const couponKindSchema: z.ZodEnum<{