@sayren/store-sdk 0.29.7 → 0.30.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.mjs CHANGED
@@ -665,6 +665,7 @@ const categorySchema = z.object({
665
665
  metaTitle: z.string().nullable(),
666
666
  metaDescription: z.string().nullable(),
667
667
  metaKeywords: z.string().nullable(),
668
+ flowId: z.string().nullable().optional().describe("주문 흐름(이슈 #115) — 맨 아래 카테고리에만 있다. 흐름을 지정하지 않은 상품이 쓴다. null이면 기본 흐름"),
668
669
  createdAt: z.string(),
669
670
  updatedAt: z.string()
670
671
  });
@@ -713,7 +714,8 @@ const categoryPatchRequestSchema = z.object({
713
714
  productSort: categoryProductSortSchema.optional(),
714
715
  metaTitle: z.string().max(100).nullable().optional(),
715
716
  metaDescription: z.string().max(300).nullable().optional(),
716
- metaKeywords: z.string().max(200).nullable().optional()
717
+ metaKeywords: z.string().max(200).nullable().optional(),
718
+ flowId: z.string().nullable().optional().describe("주문 흐름(이슈 #115) — 게시한 흐름 id, null이면 기본 흐름. 맨 아래 카테고리에만 지정한다(400 `CATEGORY_NOT_LEAF`). 게시하지 않은 흐름은 409 `FLOW_NOT_PUBLISHED`")
717
719
  });
718
720
  const categoryDeleteStrategySchema = z.enum(["reparent", "cascade"]);
719
721
  /**
@@ -979,9 +981,73 @@ function fulfillmentTypeOf(value) {
979
981
  function fulfillmentRuleOf(type) {
980
982
  return FULFILLMENT_RULES[fulfillmentTypeOf(type)];
981
983
  }
982
- /** 택배 배송이 필요한가 — 배송비 묶음·배송지·발송 흐름의 판정은 이 함수 하나를 지난다 */
983
- function requiresShipping(type) {
984
- return fulfillmentRuleOf(type).requiresShipping;
984
+ /**
985
+ * 이행 방식.
986
+ * - `CARRIER` 택배(송장·배송 추적)
987
+ * - `DIRECT` 직접 배달(배송지 있음, 송장 없음)
988
+ * - `PICKUP` 방문 수령(배송지·배송비 없음)
989
+ * - `PROVIDED` 제공 처리(배송 없는 상품)
990
+ */
991
+ const FULFILLMENT_METHODS = [
992
+ "CARRIER",
993
+ "DIRECT",
994
+ "PICKUP",
995
+ "PROVIDED"
996
+ ];
997
+ const fulfillmentMethodSchema = z.enum(FULFILLMENT_METHODS);
998
+ /** 방식별 규칙표 — **유일한 원천이다.** */
999
+ const FULFILLMENT_METHOD_RULES = {
1000
+ CARRIER: {
1001
+ requiresAddress: true,
1002
+ carrierTracking: true,
1003
+ pickupLocation: false
1004
+ },
1005
+ DIRECT: {
1006
+ requiresAddress: true,
1007
+ carrierTracking: false,
1008
+ pickupLocation: false
1009
+ },
1010
+ PICKUP: {
1011
+ requiresAddress: false,
1012
+ carrierTracking: false,
1013
+ pickupLocation: true
1014
+ },
1015
+ PROVIDED: {
1016
+ requiresAddress: false,
1017
+ carrierTracking: false,
1018
+ pickupLocation: false
1019
+ }
1020
+ };
1021
+ /** 유형별 허용 방식 — 첫 값이 유형 기본이다 */
1022
+ const FULFILLMENT_METHODS_BY_TYPE = {
1023
+ SHIPPING: [
1024
+ "CARRIER",
1025
+ "DIRECT",
1026
+ "PICKUP"
1027
+ ],
1028
+ MANUAL: ["PROVIDED", "PICKUP"]
1029
+ };
1030
+ /** 유형의 기본 방식 — 허용 방식을 두지 않은 상품·이 필드 이전 주문상품 */
1031
+ function defaultFulfillmentMethodOf(type) {
1032
+ return FULFILLMENT_METHODS_BY_TYPE[fulfillmentTypeOf(type)][0];
1033
+ }
1034
+ /** 상품의 허용 방식 — 두지 않았으면 유형 기본 하나다 */
1035
+ function fulfillmentMethodsOf(fulfillment) {
1036
+ const methods = (fulfillment.methods ?? []).filter((m) => FULFILLMENT_METHODS.includes(m));
1037
+ return methods.length > 0 ? methods : [defaultFulfillmentMethodOf(fulfillment.type)];
1038
+ }
1039
+ /** 저장된 방식 → 방식. null·모르는 값은 유형 기본이다 */
1040
+ function fulfillmentMethodOf(type, method) {
1041
+ const parsed = fulfillmentMethodSchema.safeParse(method);
1042
+ return parsed.success ? parsed.data : defaultFulfillmentMethodOf(type);
1043
+ }
1044
+ /**
1045
+ * 택배 배송이 필요한가 — 배송비 묶음·배송지·발송 흐름의 판정은 이 함수 하나를 지난다.
1046
+ * 방식을 주면 방식 규칙도 본다(배송 상품의 방문 수령은 배송이 없다). 방식을 모르면 유형 규칙만 본다.
1047
+ */
1048
+ function requiresShipping(type, method) {
1049
+ if (!fulfillmentRuleOf(type).requiresShipping) return false;
1050
+ return method == null || FULFILLMENT_METHOD_RULES[fulfillmentMethodOf(type, method)].requiresAddress;
985
1051
  }
986
1052
  /** 반품에 수거가 필요한가 — 비실물 반품은 수거 등록·수거 완료 없이 승인한다 */
987
1053
  function requiresCollection(type) {
@@ -1030,6 +1096,11 @@ function refineShippingConsistency(value, ctx) {
1030
1096
  });
1031
1097
  }
1032
1098
  const deliveryTypeDescription = "배송비 유형. `FREE` 무료, `PAID` 유료, `CONDITIONAL_FREE` 조건부 무료";
1099
+ /** 요청의 허용 방식 — 유형마다 받는 값이 다르다. 겹치면 400 */
1100
+ function methodsRequestSchema(type) {
1101
+ return z.array(z.enum(FULFILLMENT_METHODS_BY_TYPE[type])).min(1).refine((methods) => new Set(methods).size === methods.length, { message: "이행 방식이 겹칩니다" }).describe(`허용 이행 방식(이슈 #115). ${type === "SHIPPING" ? "`CARRIER`·`DIRECT`·`PICKUP`" : "`PROVIDED`·`PICKUP`"} 중 1개 이상, 첫 값이 주문서 기본이다. 생략하면 등록은 유형 기본(${type === "SHIPPING" ? "`CARRIER`" : "`PROVIDED`"}), 수정은 지금 값 유지(유형을 바꾸면 유형 기본)`);
1102
+ }
1103
+ const storedMethodsSchema = z.array(z.string()).optional().describe("허용 이행 방식(이슈 #115). 현재 값은 `CARRIER`·`DIRECT`·`PICKUP`·`PROVIDED`이고 값이 추가될 수 있어 문자열로 받는다. 셀러가 두지 않았으면 생략되고 유형 기본(`SHIPPING`은 `CARRIER`, `MANUAL`은 `PROVIDED`)이다");
1033
1104
  const shippingCreateSchema = z.strictObject({
1034
1105
  deliveryType: deliveryTypeSchema.default("PAID").describe(deliveryTypeDescription),
1035
1106
  deliveryFee: z.number().int().min(0).optional().describe("배송비. 원 단위. 생략하면 상점 기본 배송비(`GET /v1/store`의 `shippingPolicy.baseDeliveryFee`)를 저장한다. FREE면 0이거나 생략한다"),
@@ -1042,8 +1113,12 @@ const shippingCreateSchema = z.strictObject({
1042
1113
  */
1043
1114
  const productFulfillmentCreateSchema = z.discriminatedUnion("type", [z.strictObject({
1044
1115
  type: z.literal("SHIPPING"),
1045
- shipping: shippingCreateSchema.optional()
1046
- }), z.strictObject({ type: z.literal("MANUAL") })]);
1116
+ shipping: shippingCreateSchema.optional(),
1117
+ methods: methodsRequestSchema("SHIPPING").optional()
1118
+ }), z.strictObject({
1119
+ type: z.literal("MANUAL"),
1120
+ methods: methodsRequestSchema("MANUAL").optional()
1121
+ })]);
1047
1122
  const shippingUpdateSchema = z.strictObject({
1048
1123
  deliveryType: deliveryTypeSchema.describe(deliveryTypeDescription),
1049
1124
  deliveryFee: z.number().int().min(0).describe("배송비. 원 단위. FREE면 0"),
@@ -1057,8 +1132,12 @@ const shippingUpdateSchema = z.strictObject({
1057
1132
  */
1058
1133
  const productFulfillmentUpdateSchema = z.discriminatedUnion("type", [z.strictObject({
1059
1134
  type: z.literal("SHIPPING"),
1060
- shipping: shippingUpdateSchema
1061
- }), z.strictObject({ type: z.literal("MANUAL") })]);
1135
+ shipping: shippingUpdateSchema,
1136
+ methods: methodsRequestSchema("SHIPPING").optional()
1137
+ }), z.strictObject({
1138
+ type: z.literal("MANUAL"),
1139
+ methods: methodsRequestSchema("MANUAL").optional()
1140
+ })]);
1062
1141
  /**
1063
1142
  * 저장된 상품 이행 — 알려진 유형의 닫힌 유니온. 서버의 상품 엔티티와 응답이 이 모양을 쓴다.
1064
1143
  * 응답 파싱은 `productFulfillmentResponseSchema`(열린 유니온)를 쓴다.
@@ -1071,8 +1150,12 @@ const productFulfillmentSchema = z.discriminatedUnion("type", [z.object({
1071
1150
  conditionalFreeAmount: z.number().int().nullable().describe("조건부 무료 기준 묶음 소계. CONDITIONAL_FREE가 아니면 null"),
1072
1151
  shippingAddressId: z.string().nullable().describe("출고지 주소 id. null이면 상점 기본 출고지를 따른다"),
1073
1152
  returnAddressId: z.string().nullable().describe("반품지 주소 id. null이면 상점 기본 반품지를 따른다")
1074
- })
1075
- }), z.object({ type: z.literal("MANUAL") })]);
1153
+ }),
1154
+ methods: storedMethodsSchema
1155
+ }), z.object({
1156
+ type: z.literal("MANUAL"),
1157
+ methods: storedMethodsSchema
1158
+ })]);
1076
1159
  /**
1077
1160
  * 열린 응답 유니온 — 알려진 유형은 판별 유니온으로 검사하고, **모르는 유형만** `{ type: "OTHER", rawType }`로 읽는다.
1078
1161
  *
@@ -1086,6 +1169,16 @@ function openFulfillmentUnion(known) {
1086
1169
  }))]);
1087
1170
  }
1088
1171
  const productFulfillmentResponseSchema = openFulfillmentUnion(productFulfillmentSchema).describe("상품 이행. `type`이 유형이고 같은 이름의 키가 유형별 속성이다. 값이 추가될 수 있어 SDK는 모르는 유형을 `{ type: \"OTHER\", rawType }`로 읽는다");
1172
+ const snapshotMethodSchema = z.string().optional().describe("주문 시점 이행 방식(이슈 #115). 현재 값은 `CARRIER`·`DIRECT`·`PICKUP`·`PROVIDED`이고 값이 추가될 수 있어 문자열로 받는다. 없으면 유형 기본");
1173
+ /** 주문상품의 주문 시점 픽업 장소 — 장소를 고치거나 지워도 이 주문의 안내는 바뀌지 않는다 */
1174
+ const pickupLocationSnapshotSchema = z.object({
1175
+ locationId: z.string(),
1176
+ name: z.string(),
1177
+ address: z.string(),
1178
+ phone: z.string().nullable(),
1179
+ hours: z.string().nullable()
1180
+ });
1181
+ const snapshotPickupSchema = pickupLocationSnapshotSchema.optional().describe("방문 수령(`PICKUP`)에서 고른 장소(주문 시점 값). 픽업 장소를 두지 않은 상점이거나 다른 방식이면 생략");
1089
1182
  /**
1090
1183
  * 주문상품의 주문 시점 이행 — 결제 확정이 주문서 줄에서 굳힌다. 상품의 현재 값이 아니다. 서버는 주문상품 컬럼
1091
1184
  * (`fulfillment_type`·`delivery_bundle_key`)과 jsonb(`fulfillment_snapshot`)를 합쳐 이 모양을 만든다.
@@ -1095,9 +1188,35 @@ const orderItemFulfillmentSnapshotSchema = z.discriminatedUnion("type", [z.objec
1095
1188
  shipping: z.object({
1096
1189
  bundleKey: z.string().nullable().describe("배송 묶음 키. 같은 키의 주문상품이 배송비를 한 번 낸 한 묶음이다. #29 이전 주문은 null"),
1097
1190
  returnAddressId: z.string().nullable().describe("주문 시점 반품지 주소 id. null이거나 지워진 주소면 상점 기본 반품지로 안내한다")
1098
- })
1099
- }), z.object({ type: z.literal("MANUAL") })]);
1191
+ }),
1192
+ method: snapshotMethodSchema,
1193
+ pickupLocation: snapshotPickupSchema
1194
+ }), z.object({
1195
+ type: z.literal("MANUAL"),
1196
+ method: snapshotMethodSchema,
1197
+ pickupLocation: snapshotPickupSchema
1198
+ })]);
1100
1199
  const orderItemFulfillmentSnapshotResponseSchema = openFulfillmentUnion(orderItemFulfillmentSnapshotSchema).describe("주문 시점 이행 스냅샷. 상품을 나중에 고쳐도 바뀌지 않는다. 제공 기록은 `fulfillment`에 있다. 값이 추가될 수 있어 SDK는 모르는 유형을 `OTHER`로 읽는다");
1200
+ /** 상점당 픽업 장소 상한 */
1201
+ const MAX_PICKUP_LOCATIONS = 20;
1202
+ /** 방문 수령(`PICKUP`) 장소 — 상점 설정이다. 구매자가 주문서에서 고르고 주문상품에 주문 시점 값이 남는다 */
1203
+ const pickupLocationSchema = z.object({
1204
+ locationId: z.string(),
1205
+ name: z.string().describe("장소 이름(예: 본점)"),
1206
+ address: z.string().describe("주소"),
1207
+ phone: z.string().nullable().describe("연락처. 없으면 null"),
1208
+ hours: z.string().nullable().describe("수령 가능 시간 안내. 없으면 null"),
1209
+ usable: z.boolean().describe("사용 여부. false면 구매자에게 보이지 않고 주문서에서 고를 수 없다"),
1210
+ sortOrder: z.number().int(),
1211
+ createdAt: z.string()
1212
+ });
1213
+ const pickupLocationRequestSchema = z.strictObject({
1214
+ name: z.string().trim().min(1).max(50),
1215
+ address: z.string().trim().min(1).max(200),
1216
+ phone: z.string().trim().max(30).nullish(),
1217
+ hours: z.string().trim().max(100).nullish(),
1218
+ usable: z.boolean().default(true)
1219
+ });
1101
1220
  //#endregion
1102
1221
  //#region src/schemas/points.ts
1103
1222
  /**
@@ -1476,14 +1595,82 @@ function proratedRefundBase(totalPrice, quantity, settledQuantity, cancelQuantit
1476
1595
  return Math.max(0, after - before);
1477
1596
  }
1478
1597
  //#endregion
1598
+ //#region src/schemas/stay.ts
1599
+ /**
1600
+ * 날짜별 재고·가격(이슈 #118) — 숙박·회차처럼 날짜마다 재고와 가격이 다른 상품. 상품 `inventoryMode: "DATED"`이면 조합(객실) × 날짜
1601
+ * 달력이 재고·가격의 원천이고, 주문서 줄은 기간(`stay`)을 받는다. 날짜는 한국 날짜 `YYYY-MM-DD`다.
1602
+ */
1603
+ /** 한국 날짜 */
1604
+ const calendarDateSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/).refine((value) => {
1605
+ const date = /* @__PURE__ */ new Date(`${value}T00:00:00Z`);
1606
+ return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === value;
1607
+ }, "날짜 형식이 아닙니다").describe("한국 날짜(YYYY-MM-DD)");
1608
+ /** 한 번에 받는 최대 박수 */
1609
+ const MAX_STAY_NIGHTS = 30;
1610
+ /** 달력 한 번 조회·설정 최대 일수 */
1611
+ const MAX_CALENDAR_DAYS = 400;
1612
+ const inventoryModeSchema = z.enum(["STANDARD", "DATED"]).describe("재고 방식. `STANDARD` 조합 재고 수량 · `DATED` 날짜별 재고·가격(숙박·회차)");
1613
+ /** 숙박 기간 — 체크인 날부터 체크아웃 전날까지가 박이다 */
1614
+ const stayRangeSchema = z.object({
1615
+ checkIn: calendarDateSchema,
1616
+ checkOut: calendarDateSchema
1617
+ }).describe("숙박 기간. 체크인 날부터 체크아웃 전날까지 박마다 재고·가격을 본다");
1618
+ /** 주문 시점 숙박 — 박마다 그때 가격 */
1619
+ const staySnapshotSchema = z.object({
1620
+ checkIn: z.string(),
1621
+ checkOut: z.string(),
1622
+ nights: z.array(z.object({
1623
+ date: z.string(),
1624
+ price: z.number().int()
1625
+ })).describe("박마다 날짜·가격(객실 1개 기준)")
1626
+ });
1627
+ /** 체크인~체크아웃 전날 날짜 목록. 형식이 틀리거나 체크아웃이 체크인 이하면 빈 목록 */
1628
+ function nightsOf(range) {
1629
+ const start = Date.parse(`${range.checkIn}T00:00:00Z`);
1630
+ const end = Date.parse(`${range.checkOut}T00:00:00Z`);
1631
+ if (Number.isNaN(start) || Number.isNaN(end) || end <= start) return [];
1632
+ const nights = [];
1633
+ for (let at = start; at < end; at += 864e5) nights.push(new Date(at).toISOString().slice(0, 10));
1634
+ return nights;
1635
+ }
1636
+ /** 관리 달력 한 칸 */
1637
+ const calendarDaySchema = z.object({
1638
+ variantId: z.string(),
1639
+ date: z.string(),
1640
+ stock: z.number().int().describe("그날 남은 재고"),
1641
+ price: z.number().int().nullable().describe("그날 가격(원). null이면 조합 가격")
1642
+ });
1643
+ const calendarQuerySchema = z.object({
1644
+ variantId: z.string().optional().describe("조합. 생략하면 모든 조합"),
1645
+ from: calendarDateSchema,
1646
+ to: calendarDateSchema.describe("끝 날짜(포함)")
1647
+ });
1648
+ /**
1649
+ * 달력 설정 — 기간의 날짜마다 재고·가격을 덮어쓴다(없는 날은 만든다). `stock`·`price`는 준 것만 바꾸고, `price: null`은 조합 가격으로
1650
+ * 되돌린다. `daysOfWeek`(0=일~6=토)를 주면 그 요일만 바꾼다
1651
+ */
1652
+ const setCalendarRequestSchema = z.object({
1653
+ variantIds: z.array(z.string()).min(1).max(50),
1654
+ from: calendarDateSchema,
1655
+ to: calendarDateSchema,
1656
+ stock: z.number().int().min(0).max(1e5).optional(),
1657
+ price: z.number().int().min(0).multipleOf(10).nullable().optional(),
1658
+ daysOfWeek: z.array(z.number().int().min(0).max(6)).min(1).max(7).optional()
1659
+ }).refine((value) => value.stock !== void 0 || value.price !== void 0, { message: "stock이나 price 중 하나는 있어야 합니다" });
1660
+ //#endregion
1479
1661
  //#region src/schemas/upload.ts
1480
1662
  /**
1481
1663
  * 업로드 용도. 허용 확장자와 크기 상한이 용도별로 다르다.
1482
1664
  *
1483
1665
  * - `product-image`: 상품 목록·상세의 상품 이미지. 목록 썸네일로 쓰이므로 정지 이미지만 받는다.
1484
1666
  * - `description`: 상세설명 본문에 삽입하는 미디어. 동영상과 svg도 받는다.
1667
+ * - `flow-attachment`: 주문 흐름 행동의 첨부(시안 등, 이슈 #115). 구매자에게 보이므로 정지 이미지와 PDF만 받는다.
1485
1668
  */
1486
- const uploadPurposeSchema = z.enum(["product-image", "description"]);
1669
+ const uploadPurposeSchema = z.enum([
1670
+ "product-image",
1671
+ "description",
1672
+ "flow-attachment"
1673
+ ]);
1487
1674
  const MB = 1048576;
1488
1675
  /**
1489
1676
  * 용도별 업로드 제한 — 서버(`POST /v1/uploads`)와 클라이언트가 공유하는 단일 원천이다.
@@ -1517,6 +1704,18 @@ const UPLOAD_PURPOSE_LIMITS = {
1517
1704
  "mov"
1518
1705
  ],
1519
1706
  maxBytes: 50 * MB
1707
+ },
1708
+ "flow-attachment": {
1709
+ extensions: [
1710
+ "jpg",
1711
+ "jpeg",
1712
+ "png",
1713
+ "webp",
1714
+ "avif",
1715
+ "gif",
1716
+ "pdf"
1717
+ ],
1718
+ maxBytes: 20 * MB
1520
1719
  }
1521
1720
  };
1522
1721
  /** 파일명의 소문자 확장자. 확장자가 없으면 `""` */
@@ -1618,6 +1817,7 @@ const productVariantSchema = z.object({
1618
1817
  weightGram: z.number().int().nullable(),
1619
1818
  sellerCode: z.string().nullable(),
1620
1819
  usable: z.boolean(),
1820
+ attributes: z.record(z.string(), z.string()).optional().describe("조합 속성(이슈 #115) — 키 → 값 문자열(예: 회차 일시 `showAt`). 플로우가 `item.option.<키>`로 읽고 타입(날짜·숫자 등)은 플로우가 선언한다. 없으면 생략"),
1621
1821
  hasOrders: z.boolean().optional().describe("주문에 담긴 적이 있는 조합인가(이슈 #59). true인 조합은 옵션 교체에서 뺄 수 없고(409 `OPTION_HAS_ORDERS`) `usable: false`로 판매를 끈다. 서버는 항상 싣는다. 요청에는 쓰지 않는다")
1622
1822
  });
1623
1823
  /** 옵션 축(그룹) 최대 개수 — 스키마 상한의 단일 원천 */
@@ -1660,6 +1860,21 @@ const addonGroupSchema = z.object({
1660
1860
  required: z.boolean().describe("구매자가 꼭 골라야 하는가. false면 고르지 않아도 된다"),
1661
1861
  values: z.array(addonValueSchema)
1662
1862
  });
1863
+ /**
1864
+ * 직접 입력 타입(이슈 #115 결정 24) — 값은 늘 문자열로 오가고 서버가 타입대로 검사·정규화한다.
1865
+ * `number`는 정수, `select`는 `options` 중 하나, `date`는 `YYYY-MM-DD`, `datetime`은 오프셋 있는 ISO 8601이다.
1866
+ * `image`는 구매자 업로드(`POST /storefront/v1/uploads/order-inputs`) 주소 목록이고 `maxLength`가 최대 장수(1~5)다
1867
+ */
1868
+ const CUSTOM_INPUT_TYPES = [
1869
+ "text",
1870
+ "number",
1871
+ "select",
1872
+ "date",
1873
+ "datetime",
1874
+ "image"
1875
+ ];
1876
+ /** 직접 입력 키 — 플로우 식이 `item.inputs.<key>`로 읽는다. 영문 소문자로 시작하는 영숫자·밑줄 */
1877
+ const customInputKeySchema = z.string().regex(/^[a-z][a-zA-Z0-9_]{0,39}$/).describe("고정 키(영문 소문자로 시작, 영숫자·밑줄 40자). 플로우 식이 `item.inputs.<key>`로 읽는다");
1663
1878
  /** 직접 입력 항목 — 예: 각인 문구 */
1664
1879
  const customInputSchema = z.object({
1665
1880
  inputId: z.string(),
@@ -1668,7 +1883,10 @@ const customInputSchema = z.object({
1668
1883
  maxLength: z.number().int().describe("최대 글자 수"),
1669
1884
  required: z.boolean(),
1670
1885
  usable: z.boolean().describe("사용 여부. false면 구매자에게 보이지 않는다"),
1671
- sortOrder: z.number().int()
1886
+ sortOrder: z.number().int(),
1887
+ key: z.string().nullable().optional().describe("고정 키. 없으면 null(플로우 식이 읽지 않는다)"),
1888
+ type: z.string().optional().describe("입력 타입. 현재 값은 `text`·`number`·`select`·`date`·`datetime`이고 값이 추가될 수 있어 문자열로 받는다. 없으면 `text`"),
1889
+ options: z.array(z.string()).nullable().optional().describe("`select`의 선택지. 그 밖의 타입은 null")
1672
1890
  });
1673
1891
  /**
1674
1892
  * 직접 입력 항목명에 쓸 수 없는 개인정보성 단어 — 상점 플랫폼 검사와 서버 400(`CUSTOM_INPUT_LABEL_FORBIDDEN`)이 이 목록 하나를 쓴다.
@@ -1731,7 +1949,11 @@ const customInputRequestSchema = z.object({
1731
1949
  placeholder: z.string().trim().max(100).nullish(),
1732
1950
  maxLength: z.number().int().min(1).max(200),
1733
1951
  required: z.boolean().default(false),
1734
- usable: z.boolean().default(true)
1952
+ usable: z.boolean().default(true),
1953
+ /** 아래 셋은 생략하면 지금 값을 유지한다(새 항목은 키 없음·`text`) — 옛 클라이언트의 저장이 타입을 지우지 않는다 */
1954
+ key: customInputKeySchema.nullish(),
1955
+ type: z.enum(CUSTOM_INPUT_TYPES).optional().describe("입력 타입. 생략하면 지금 값 유지(새 항목은 `text`)"),
1956
+ options: z.array(z.string().trim().min(1).max(50)).min(1).max(30).nullish().describe("`select`의 선택지(1~30개). `select`가 아니면 생략하거나 null")
1735
1957
  });
1736
1958
  /**
1737
1959
  * 주문상품·장바구니·주문서 줄의 옵션 선택 스냅샷 한 칸 — 주문 시점 이름이다(상품을 고쳐도 바뀌지 않는다).
@@ -1746,7 +1968,9 @@ const optionSelectionSchema = z.object({
1746
1968
  /** 구매자가 적은 직접 입력값 — 주문 시점 항목명과 값 */
1747
1969
  const customInputValueSchema = z.object({
1748
1970
  label: z.string(),
1749
- value: z.string()
1971
+ value: z.string(),
1972
+ key: z.string().nullable().optional().describe("항목의 고정 키(주문 시점). 없으면 null"),
1973
+ type: z.string().optional().describe("항목의 입력 타입(주문 시점). 없으면 `text`")
1750
1974
  });
1751
1975
  const discountSchema = z.object({
1752
1976
  productId: z.string(),
@@ -1777,6 +2001,8 @@ const productSchema = productSummarySchema.extend({
1777
2001
  customInputs: z.array(customInputSchema).optional().default([]).describe("직접 입력 항목(이슈 #59). 사용하지 않는 항목도 싣는다. 없으면 빈 배열. 서버는 항상 싣는다"),
1778
2002
  optionSort: optionSortSchema.optional().default("REGISTERED").describe("옵션 값 정렬 순서(이슈 #59). 서버는 항상 싣는다"),
1779
2003
  fulfillment: productFulfillmentResponseSchema,
2004
+ inventoryMode: z.string().optional().describe("재고 방식(이슈 #118). 날짜별 재고 상품만 `DATED`를 싣는다. 없으면 `STANDARD`"),
2005
+ flowId: z.string().nullable().optional().describe("주문 흐름(이슈 #115) — 상품에 지정한 흐름. null이면 카테고리의 흐름, 그것도 없으면 기본 흐름"),
1780
2006
  fulfillmentTypeLocked: z.boolean().describe("판매 이력(주문상품)이 있어 상품 유형(`fulfillment.type`)을 바꿀 수 없는가. true면 다른 유형으로 수정하는 요청이 409 `FULFILLMENT_TYPE_LOCKED`다. 같은 유형 안의 속성은 바꿀 수 있다"),
1781
2007
  refundPolicy: productRefundPolicyPatchSchema.nullable().describe("상품별 환불 정책 덮어쓰기(상품이 정한 항목만). null이면 상점 기본 환불 정책을 쓴다. 반품·교환 배송비(`returnDeliveryFee`·`exchangeDeliveryFee`)는 배송 상품에만 있다"),
1782
2008
  /**
@@ -1868,7 +2094,8 @@ const productVariantRequestSchema = z.object({
1868
2094
  costPrice: z.number().int().min(0).optional(),
1869
2095
  weightGram: z.number().int().min(0).optional(),
1870
2096
  sellerCode: codeSchema.optional(),
1871
- usable: z.boolean().default(true)
2097
+ usable: z.boolean().default(true),
2098
+ attributes: z.record(z.string().regex(/^[a-z][a-zA-Z0-9_]{0,39}$/), z.string().max(100)).refine((value) => Object.keys(value).length <= 10, { message: "조합 속성은 10개까지입니다" }).optional().describe("조합 속성(이슈 #115) — 키 → 값 문자열(예: 회차 일시 `showAt`). 플로우가 `item.option.<키>`로 읽고 타입(날짜·숫자 등)은 플로우가 선언한다. 생략하면 지금 값 유지(새 조합은 없음), `{}`면 비운다")
1872
2099
  });
1873
2100
  /** 축 × 값 → variant 전체 교체 요청 (PUT /products/{productId}/options) */
1874
2101
  const optionModelRequestSchema = z.object({
@@ -1931,7 +2158,9 @@ const productWriteShape = {
1931
2158
  })).optional(),
1932
2159
  refundPolicy: productRefundPolicyPatchSchema.nullish().describe("상품별 환불 정책 — 준 항목만 상점 기본을 덮어쓴다. `null`이나 생략은 상점 기본을 그대로 쓴다는 뜻이다. 반품·교환 배송비(`returnDeliveryFee`·`exchangeDeliveryFee`)는 배송 상품에만 줄 수 있다(다른 유형은 400)"),
1933
2160
  ...optionModelRequestSchema.shape,
1934
- sourceOptionSetIds: z.array(z.string()).max(10).optional().describe("쓰기 전용(이슈 #59) — 이 저장으로 옵션을 불러온 저장 옵션 id. 상품 저장과 같은 트랜잭션에서 불러오기 기록을 남겨 저장 옵션의 `importedProductCount`를 센다. 없는 id는 무시한다")
2161
+ sourceOptionSetIds: z.array(z.string()).max(10).optional().describe("쓰기 전용(이슈 #59) — 이 저장으로 옵션을 불러온 저장 옵션 id. 상품 저장과 같은 트랜잭션에서 불러오기 기록을 남겨 저장 옵션의 `importedProductCount`를 센다. 없는 id는 무시한다"),
2162
+ inventoryMode: inventoryModeSchema.optional().describe("재고 방식(이슈 #118). `DATED`면 날짜별 달력(`PUT /products/{id}/calendar`)이 재고·가격이고 주문서 줄은 숙박 기간(`stay`)을 받는다. 생략하면 등록은 `STANDARD`, 수정은 지금 값. 판매 이력이 있으면 바꿀 수 없다(409 `INVENTORY_MODE_LOCKED`)"),
2163
+ flowId: z.string().nullable().optional().describe("주문 흐름(이슈 #115) — 게시한 흐름 id. null이면 카테고리의 흐름(없으면 기본 흐름)을 쓴다. 생략하면 등록은 null, 수정은 지금 값. 게시하지 않은 흐름은 409 `FLOW_NOT_PUBLISHED`. 이미 결제된 주문은 결제 때 붙은 흐름을 그대로 따른다")
1935
2164
  };
1936
2165
  const productCreateRequestSchema = z.strictObject({
1937
2166
  ...productWriteShape,
@@ -1947,6 +2176,7 @@ const productPatchRequestSchema = z.strictObject({
1947
2176
  name: z.string().max(100).optional(),
1948
2177
  salePrice: z.number().int().multipleOf(10).optional(),
1949
2178
  status: productStatusSchema.optional(),
2179
+ flowId: z.string().nullable().optional().describe("주문 흐름(이슈 #115) — 게시한 흐름 id, null이면 카테고리의 흐름(없으면 기본 흐름). 생략하면 바꾸지 않는다"),
1950
2180
  images: productImagesRequestSchema.optional().describe("상품 이미지 주소 목록. 주면 통째로 바꾼다(현재 목록과 병합하지 않는다). 첫 장이 대표 이미지(썸네일)다. 생략하면 바꾸지 않는다"),
1951
2181
  fulfillment: productFulfillmentUpdateSchema.optional().describe(fulfillmentUpdateDescription),
1952
2182
  refundPolicy: productRefundPolicyPatchSchema.nullable().optional().describe("상품별 환불 정책. 주면 통째로 바꾼다(준 항목만 상점 기본을 덮어쓴다). `null`은 덮어쓰기를 지워 상점 기본을 따른다. 생략하면 바꾸지 않는다"),
@@ -2354,6 +2584,182 @@ const collectionPreviewSchema = z.object({
2354
2584
  salesComputedAt: z.string().nullable().default(null).describe("판매량 기준 시각. 판매량 상위 조건이나 판매량순 정렬을 쓰면 이 시각까지의 주문을 센다. 판매량을 쓰지 않거나 집계 전이면 null")
2355
2585
  });
2356
2586
  //#endregion
2587
+ //#region src/schemas/commerce-flow.ts
2588
+ /**
2589
+ * 커머스 플로우(이슈 #115) — 주문상품이 따르는 플로우의 지금 상태와 할 수 있는 행동. 공개 계약은 필드 추가로만 자란다.
2590
+ * 행동 키·필드 키·꺼진 이유는 상점·앱이 늘리는 **열린 문자열**이다(모르는 값도 파싱한다). 공개 상태(`coreStatus`)만 닫힌 8개 값이다.
2591
+ * 화면은 이 값만 그리고 상태 이름으로 분기하지 않는다 — 판정은 서버가 한다.
2592
+ */
2593
+ const flowInputFieldSchema = z.object({
2594
+ key: z.string(),
2595
+ type: z.string().describe("text · number · select · date · datetime · image (늘어날 수 있다)"),
2596
+ required: z.boolean(),
2597
+ label: z.string(),
2598
+ maxLength: z.number().int().optional(),
2599
+ maxFiles: z.number().int().optional(),
2600
+ options: z.array(z.union([z.string(), z.number()])).optional()
2601
+ });
2602
+ const flowActionSchema = z.object({
2603
+ key: z.string().describe("행동 키. 플랫폼 키(예: CONFIRM_ORDER)와 상점·앱이 정한 키가 섞인다"),
2604
+ label: z.string().describe("보여 줄 이름"),
2605
+ mode: z.enum([
2606
+ "INSTANT",
2607
+ "REQUEST",
2608
+ "VIEW"
2609
+ ]).describe("INSTANT 바로 실행 · REQUEST 승인 요청(클레임) · VIEW 보기"),
2610
+ enabled: z.boolean(),
2611
+ disabled: z.object({
2612
+ reason: z.string().describe("EXPIRED · CONDITION (늘어날 수 있다)"),
2613
+ message: z.string().optional()
2614
+ }).optional().describe("꺼진 이유. 켜져 있으면 없다"),
2615
+ availableUntil: z.string().optional().describe("이 시각까지만 할 수 있다(ISO 8601)"),
2616
+ subflow: z.string().optional().describe("이 행동이 시작하는 하위 플로우(클레임)"),
2617
+ input: z.array(flowInputFieldSchema).optional().describe("받는 입력 폼"),
2618
+ partialQuantity: z.union([z.boolean(), z.literal("UNIT")]).optional()
2619
+ });
2620
+ /** 커스텀 필드 값 — 문자열(날짜·일시는 ISO 8601)·숫자·참거짓·null, 수량 단위 필드는 문자열 배열 */
2621
+ const flowFieldValueSchema = z.union([
2622
+ z.string(),
2623
+ z.number(),
2624
+ z.boolean(),
2625
+ z.null(),
2626
+ z.array(z.string())
2627
+ ]);
2628
+ const flowStateSchema = z.object({
2629
+ key: z.string().describe("플로우 안 상태 키(상점이 정한다). 화면 분기에 쓰지 않는다"),
2630
+ label: z.string().describe("보는 사람(셀러·구매자)의 상태 이름"),
2631
+ coreStatus: orderItemStatusSchema.optional().describe("공개 상태(8개)"),
2632
+ claimStatus: claimStatusSchema.optional(),
2633
+ message: z.string().optional().describe("보는 사람에게 보여 줄 안내문"),
2634
+ enteredAt: z.string().describe("이 상태에 들어온 시각(ISO 8601)"),
2635
+ deadlineAt: z.string().optional().describe("가장 가까운 기한(ISO 8601)"),
2636
+ attachments: z.array(z.string()).optional().describe("가장 최근 행동이 붙인 첨부 주소(시안 등, #115). 없으면 생략"),
2637
+ progress: z.boolean().optional().describe("진행 단계 표시에 넣는 상태인가"),
2638
+ fields: z.record(z.string(), flowFieldValueSchema).describe("보는 사람 공개 범위의 커스텀 필드")
2639
+ });
2640
+ const orderItemFlowSchema = z.object({
2641
+ orderItemId: z.string(),
2642
+ flow: z.object({
2643
+ flowId: z.string(),
2644
+ version: z.number().int()
2645
+ }),
2646
+ flowState: flowStateSchema,
2647
+ actions: z.array(flowActionSchema),
2648
+ timers: z.array(z.object({
2649
+ key: z.string(),
2650
+ dueAt: z.string(),
2651
+ paused: z.boolean()
2652
+ })).describe("걸린 타이머(셀러 보기)"),
2653
+ ended: z.boolean()
2654
+ });
2655
+ const flowActionRequestSchema = z.object({ input: z.record(z.string(), z.unknown()).optional().describe("행동 입력 — 행동의 `input` 폼 키") });
2656
+ /**
2657
+ * 행동 실행 결과. 지금은 동기 완료(COMPLETED)뿐이다. 외부 호출이 든 전이는 202와 함께 ACCEPTED(runId)가 온다(HTTP·앱 노드 단계에서 더한다).
2658
+ * 동기 거절은 409(ACTION_NOT_AVAILABLE)다.
2659
+ */
2660
+ const flowActionResultSchema = z.object({
2661
+ status: z.literal("COMPLETED"),
2662
+ flowState: flowStateSchema,
2663
+ actions: z.array(flowActionSchema),
2664
+ /** 이 행동으로 바뀐 주문상품(주문 묶음 진행이면 여럿) */
2665
+ affectedOrderItemIds: z.array(z.string())
2666
+ });
2667
+ /** 플로우 작성 그래프와 정의는 형태가 크고 노드 종류가 늘어나므로 여기서는 열린 객체로 싣는다(검증은 서버 `…/draft/check`) */
2668
+ const flowDocumentSchema = z.record(z.string(), z.unknown());
2669
+ const flowPresetSummarySchema = z.object({
2670
+ key: z.string(),
2671
+ presetVersion: z.number().int(),
2672
+ name: z.string(),
2673
+ description: z.string(),
2674
+ availability: z.enum(["AVAILABLE", "BLOCKED"]).describe("BLOCKED면 의존 이슈(dependsOn)가 끝나야 설치할 수 있다"),
2675
+ dependsOn: z.array(z.string()),
2676
+ requires: flowDocumentSchema.describe("프리셋이 쓰는 Core 기능(진행 단위·이행 방식·주문 입력 등)"),
2677
+ variables: z.array(flowDocumentSchema).describe("셀러가 값만 입력하는 변수 정의")
2678
+ });
2679
+ const commerceFlowSummarySchema = z.object({
2680
+ flowId: z.string(),
2681
+ key: z.string().describe("상점 안 유일한 키"),
2682
+ name: z.string(),
2683
+ progression: z.enum(["ITEM", "ORDER_GROUP"]),
2684
+ fulfillmentMethods: z.array(z.string()),
2685
+ presetKey: z.string().nullable().describe("설치한 프리셋(설치 뒤 연결되지 않는다)"),
2686
+ presetVersion: z.number().int().nullable(),
2687
+ activeVersion: z.number().int().nullable().describe("게시된 버전. 새 주문이 따른다"),
2688
+ archivedAt: z.string().nullable(),
2689
+ createdAt: z.string(),
2690
+ updatedAt: z.string()
2691
+ });
2692
+ const commerceFlowVersionViewSchema = z.object({
2693
+ version: z.number().int(),
2694
+ status: z.enum([
2695
+ "DRAFT",
2696
+ "ACTIVE",
2697
+ "LEGACY"
2698
+ ]),
2699
+ revision: z.number().int().describe("초안 저장의 If-Match 값"),
2700
+ graph: flowDocumentSchema,
2701
+ definition: flowDocumentSchema,
2702
+ variables: z.record(z.string(), z.unknown()),
2703
+ publishedAt: z.string().nullable()
2704
+ });
2705
+ const commerceFlowSchema = commerceFlowSummarySchema.extend({
2706
+ draft: commerceFlowVersionViewSchema.nullable(),
2707
+ active: commerceFlowVersionViewSchema.nullable(),
2708
+ versions: z.array(z.object({
2709
+ version: z.number().int(),
2710
+ status: z.enum([
2711
+ "DRAFT",
2712
+ "ACTIVE",
2713
+ "LEGACY"
2714
+ ]),
2715
+ publishedAt: z.string().nullable()
2716
+ }))
2717
+ });
2718
+ const createCommerceFlowRequestSchema = z.object({
2719
+ key: z.string().regex(/^[a-z][a-z0-9-]{1,48}$/).describe("상점 안 유일한 키(소문자·숫자·하이픈)"),
2720
+ name: z.string().min(1).max(60).optional(),
2721
+ presetKey: z.string().optional().describe("설치할 프리셋. 없으면 빈 플로우"),
2722
+ variables: z.record(z.string(), z.unknown()).optional().describe("프리셋 변수 값")
2723
+ });
2724
+ const saveFlowDraftRequestSchema = z.object({
2725
+ graph: flowDocumentSchema,
2726
+ definition: flowDocumentSchema.optional(),
2727
+ variables: z.record(z.string(), z.unknown()).optional()
2728
+ });
2729
+ const flowIssueSchema = z.object({
2730
+ code: z.string(),
2731
+ message: z.string(),
2732
+ nodeId: z.string().optional(),
2733
+ edgeId: z.string().optional()
2734
+ });
2735
+ const commerceFlowCheckSchema = z.object({
2736
+ publishable: z.boolean().describe("게시를 막는 오류(실행 불가·공개 계약·한도)가 없다"),
2737
+ blocking: z.array(flowIssueSchema),
2738
+ warnings: z.array(flowIssueSchema).describe("업무 논리 경고 — 게시를 막지 않는다")
2739
+ });
2740
+ const resolvedFlowSchema = z.object({
2741
+ flowId: z.string(),
2742
+ version: z.number().int(),
2743
+ source: z.enum([
2744
+ "PRODUCT",
2745
+ "CATEGORY",
2746
+ "PLATFORM"
2747
+ ]).describe("PRODUCT 상품에 지정한 흐름 · CATEGORY 카테고리의 흐름 · PLATFORM 기본 흐름")
2748
+ });
2749
+ /** 시크릿 이름 — 플로우 변수 `secretRef`의 값이다 */
2750
+ const flowSecretNameSchema = z.string().regex(/^[a-z][a-z0-9-]{1,39}$/).describe("시크릿 이름(소문자·숫자·하이픈 2~40자). 플로우 변수(시크릿)의 값으로 쓴다");
2751
+ /** HTTP 노드가 부를 셀러 API — 헤더 값은 응답에 싣지 않는다 */
2752
+ const flowSecretSchema = z.object({
2753
+ name: z.string(),
2754
+ url: z.string().describe("요청 주소(https)"),
2755
+ headerNames: z.array(z.string()).describe("저장한 헤더 이름(값은 보이지 않는다)"),
2756
+ updatedAt: z.string()
2757
+ });
2758
+ const saveFlowSecretRequestSchema = z.object({
2759
+ url: z.url().refine((value) => value.startsWith("https://"), { message: "https 주소만 받습니다" }).describe("요청 주소. https만, 사설·루프백 주소는 400 `FLOW_SECRET_URL_INVALID`"),
2760
+ headers: z.record(z.string().regex(/^[A-Za-z0-9-]{1,64}$/), z.string().max(2e3)).refine((value) => Object.keys(value).length <= 10, { message: "헤더는 10개까지입니다" }).default({}).describe("함께 보낼 헤더(인증 등). 값은 암호화해 두고 다시 보여 주지 않는다")
2761
+ });
2762
+ //#endregion
2357
2763
  //#region src/schemas/promotion.ts
2358
2764
  /**
2359
2765
  * 쿠폰 금액 계산 (이슈 #47) — 쿠폰 할인을 **얼마나, 어느 주문상품에** 주는지를 정한다.
@@ -3529,7 +3935,8 @@ const eventTypeSchema = z.enum([
3529
3935
  "CLAIM.COMPLETED",
3530
3936
  "INQUIRY.CREATED",
3531
3937
  "REVIEW.CREATED",
3532
- "PRODUCT.OUT_OF_STOCK"
3938
+ "PRODUCT.OUT_OF_STOCK",
3939
+ "ORDER.FLOW_NOTIFICATION"
3533
3940
  ]).describe("웹훅 이벤트 타입. `ORDER.ADDRESS_CHANGE_REQUESTED`는 현재 발송하지 않음(호환을 위해 값만 남았고, 구독해도 이벤트가 오지 않는다)");
3534
3941
  const webhookStatusSchema = z.enum(["ACTIVE", "SUSPENDED"]).describe("구독 상태. `ACTIVE`=발송 대상, `SUSPENDED`=24시간 이상 연속 전송 실패로 발송이 정지된 상태. 정지 중 발생한 이벤트는 적재하지 않는다. 재개(`POST /webhooks/{id}/resume`)하거나 구독을 수정하면 ACTIVE로 돌아간다");
3535
3942
  const webhookSchema = z.object({
@@ -4107,6 +4514,7 @@ const orderItemSchema = z.object({
4107
4514
  optionName: z.string().nullable(),
4108
4515
  optionSelections: z.array(optionSelectionSchema).optional().default([]).describe("주문 시점 옵션 선택(이슈 #59) — 조합 옵션(옵션명마다 한 칸, 추가금 0)과 추가 선택(값의 추가금). 옵션이 없거나 이 필드 이전 주문은 빈 배열. 서버는 항상 싣는다"),
4109
4516
  customInputs: z.array(customInputValueSchema).optional().default([]).describe("구매자가 적은 직접 입력값(주문 시점 항목명과 값, 이슈 #59). 없으면 빈 배열. 서버는 항상 싣는다"),
4517
+ stay: staySnapshotSchema.optional().describe("숙박 기간과 박별 가격(날짜별 재고 상품만, 이슈 #118). 없으면 생략"),
4110
4518
  sellerCode: z.string().nullable(),
4111
4519
  fulfillmentSnapshot: orderItemFulfillmentSnapshotResponseSchema.describe("주문 시점 이행 스냅샷(이슈 #57). `type`이 주문 시점 상품 유형이다. 배송 상품이 아니면 발송·배송완료 대신 제공 처리를 하고, `DELIVERED`는 제공 완료다. 상품을 나중에 고쳐도 바뀌지 않는다. 제공 기록은 `fulfillment`에 있다"),
4112
4520
  quantity: z.number().int().describe("주문 수량"),
@@ -4365,7 +4773,10 @@ const savedCustomInputSchema = z.object({
4365
4773
  label: z.string(),
4366
4774
  placeholder: z.string().nullable(),
4367
4775
  maxLength: z.number().int(),
4368
- required: z.boolean()
4776
+ required: z.boolean(),
4777
+ key: z.string().nullable().optional().describe("고정 키(#115). 없으면 생략"),
4778
+ type: z.string().optional().describe("입력 타입(#115). 없으면 `text`"),
4779
+ options: z.array(z.string()).nullable().optional().describe("`select`의 선택지")
4369
4780
  });
4370
4781
  const savedOptionSetSchema = z.object({
4371
4782
  optionSetId: z.string(),
@@ -4391,7 +4802,11 @@ const savedCustomInputRequestSchema = z.object({
4391
4802
  label: z.string().trim().min(1).max(30),
4392
4803
  placeholder: z.string().trim().max(100).nullish(),
4393
4804
  maxLength: z.number().int().min(1).max(200),
4394
- required: z.boolean().default(false)
4805
+ required: z.boolean().default(false),
4806
+ /** 타입 있는 주문 입력(#115) — 상품 직접 입력과 같은 규칙. 생략하면 키 없음·`text` */
4807
+ key: customInputRequestSchema.shape.key,
4808
+ type: customInputRequestSchema.shape.type,
4809
+ options: customInputRequestSchema.shape.options
4395
4810
  });
4396
4811
  /**
4397
4812
  * 저장 옵션 만들기·수정 본문. 조합 옵션명은 최대 `MAX_OPTION_GROUPS`개, 추가 선택은 최대 `MAX_ADDON_GROUPS`개이고
@@ -4840,7 +5255,7 @@ function quoteDelivery(input) {
4840
5255
  for (const line of input.lines) {
4841
5256
  const product = input.productOf(line.productId);
4842
5257
  if (!product) continue;
4843
- if (!requiresShipping(line.fulfillmentType ?? product.fulfillmentType)) continue;
5258
+ if (!requiresShipping(line.fulfillmentType ?? product.fulfillmentType, line.fulfillmentMethod)) continue;
4844
5259
  shippableAmount += line.amount;
4845
5260
  const key = deliveryBundleKeyOf(product);
4846
5261
  const group = groups.get(key) ?? {
@@ -6346,7 +6761,11 @@ function createStoreClient(options) {
6346
6761
  updateVariantStock: (productId, variantId, body) => storeHttp.request("PATCH", path`/products/${productId}/variants/${variantId}/stock`, variantStockSchema, { body: variantStockRequestSchema.parse(body) }),
6347
6762
  getDiscount: (productId) => storeHttp.request("GET", path`/products/${productId}/discount`, discountSchema),
6348
6763
  setDiscount: (productId, body) => storeHttp.request("PUT", path`/products/${productId}/discount`, discountSchema, { body: discountRequestSchema.parse(body) }),
6349
- removeDiscount: (productId) => storeHttp.requestVoid("DELETE", path`/products/${productId}/discount`)
6764
+ removeDiscount: (productId) => storeHttp.requestVoid("DELETE", path`/products/${productId}/discount`),
6765
+ /** 날짜별 재고 상품(`inventoryMode: "DATED"`, 이슈 #118)의 기간(포함) 달력. 없는 날은 싣지 않는다 */
6766
+ getCalendar: (productId, query) => storeHttp.request("GET", path`/products/${productId}/calendar`, z.array(calendarDaySchema), { query: calendarQuerySchema.parse(query) }),
6767
+ /** 기간의 날짜마다 조합별 재고·가격을 덮어쓴다. `price: null`은 조합 가격으로 되돌린다 */
6768
+ setCalendar: (productId, body) => storeHttp.request("PUT", path`/products/${productId}/calendar`, z.object({ updated: z.number().int() }), { body: setCalendarRequestSchema.parse(body) })
6350
6769
  },
6351
6770
  /**
6352
6771
  * 저장 옵션 (이슈 #59) — 자주 쓰는 옵션 구성. 불러오기는 복사라 저장 옵션을 고쳐도 불러온 상품은 바뀌지 않는다.
@@ -6465,7 +6884,51 @@ function createStoreClient(options) {
6465
6884
  }),
6466
6885
  headers: idempotency(idempotencyKey)
6467
6886
  }),
6468
- getDelivery: (orderItemId) => storeHttp.request("GET", path`/order-items/${orderItemId}/delivery`, deliveryStatusSchema)
6887
+ getDelivery: (orderItemId) => storeHttp.request("GET", path`/order-items/${orderItemId}/delivery`, deliveryStatusSchema),
6888
+ /** `GET /order-items/{id}/flow` — 커머스 플로우의 지금 상태·할 수 있는 행동·타이머(#115). 스코프 `order:r` */
6889
+ getFlow: (orderItemId) => storeHttp.request("GET", path`/order-items/${orderItemId}/flow`, orderItemFlowSchema),
6890
+ /**
6891
+ * `POST /order-items/{id}/actions/{key}` — `getFlow().actions`에 켜진 행동을 실행한다(#115). 묶음 진행이면
6892
+ * `affectedOrderItemIds`에 함께 움직인 주문상품이 온다. 에러: 409 `ACTION_NOT_AVAILABLE`
6893
+ */
6894
+ act: (orderItemId, key, input = {}, idempotencyKey) => storeHttp.request("POST", path`/order-items/${orderItemId}/actions/${key}`, flowActionResultSchema, {
6895
+ body: flowActionRequestSchema.parse({ input }),
6896
+ headers: idempotency(idempotencyKey)
6897
+ }),
6898
+ /**
6899
+ * `POST /order-items/{id}/events/{key}` — 현장 단말·연동의 상점 사건(`custom.<이름>`)을 플로우에 넣는다(#115).
6900
+ * 에러: 400 `FLOW_EVENT_KEY_INVALID`, 409 `FLOW_EVENT_NOT_ACCEPTED`
6901
+ */
6902
+ emitEvent: (orderItemId, key, input = {}, idempotencyKey) => storeHttp.request("POST", path`/order-items/${orderItemId}/events/${key}`, flowActionResultSchema, {
6903
+ body: flowActionRequestSchema.parse({ input }),
6904
+ headers: idempotency(idempotencyKey)
6905
+ })
6906
+ },
6907
+ /**
6908
+ * 커머스 플로우 (이슈 #115) — 프리셋 설치·초안 저장·검사·게시와 상품 할당 규칙. 조회 `flow:r`, 쓰기 `flow:rw`.
6909
+ * 게시한 버전은 불변이고, 진행 중 주문은 결제 때 붙은 버전으로 끝까지 간다.
6910
+ */
6911
+ commerceFlows: {
6912
+ presets: () => storeHttp.request("GET", "/flow-presets", z.array(flowPresetSummarySchema)),
6913
+ list: () => storeHttp.request("GET", "/commerce-flows", z.array(commerceFlowSummarySchema)),
6914
+ get: (flowId) => storeHttp.request("GET", path`/commerce-flows/${flowId}`, commerceFlowSchema),
6915
+ /** 프리셋 설치 또는 빈 플로우. 에러: 409 `FLOW_KEY_TAKEN`·`FLOW_PRESET_UNAVAILABLE` */
6916
+ create: (body) => storeHttp.request("POST", "/commerce-flows", commerceFlowSchema, { body: createCommerceFlowRequestSchema.parse(body) }),
6917
+ /** 초안 저장. `revision`을 주면 그 초안일 때만 저장한다(409 `FLOW_REVISION_CONFLICT`) */
6918
+ saveDraft: (flowId, body, revision) => storeHttp.request("PUT", path`/commerce-flows/${flowId}/draft`, commerceFlowSchema, {
6919
+ body: saveFlowDraftRequestSchema.parse(body),
6920
+ headers: revision === void 0 ? void 0 : { "if-match": String(revision) }
6921
+ }),
6922
+ check: (flowId) => storeHttp.request("POST", path`/commerce-flows/${flowId}/draft/check`, commerceFlowCheckSchema),
6923
+ /** 게시. 차단 오류가 있으면 409 `PUBLISH_BLOCKED`(`details.blocking`) */
6924
+ publish: (flowId) => storeHttp.request("POST", path`/commerce-flows/${flowId}/draft/publish`, commerceFlowSchema),
6925
+ /** 이 상품에 지금 붙을 플로우 */
6926
+ forProduct: (productId) => storeHttp.request("GET", path`/products/${productId}/flow`, resolvedFlowSchema),
6927
+ /** HTTP 노드 시크릿 목록(헤더 값 제외) */
6928
+ secrets: () => storeHttp.request("GET", "/commerce-flows/secrets", z.array(flowSecretSchema)),
6929
+ /** 시크릿 저장(같은 이름이면 덮어쓴다). 상점 플랫폼 OWNER·ADMIN만. 에러: 400 `FLOW_SECRET_URL_INVALID` */
6930
+ saveSecret: (name, body) => storeHttp.request("PUT", path`/commerce-flows/secrets/${name}`, flowSecretSchema, { body: saveFlowSecretRequestSchema.parse(body) }),
6931
+ removeSecret: (name) => storeHttp.requestVoid("DELETE", path`/commerce-flows/secrets/${name}`)
6469
6932
  },
6470
6933
  carriers: { list: () => storeHttp.request("GET", "/carriers", z.array(carrierSchema)) },
6471
6934
  claims: {
@@ -6779,6 +7242,13 @@ list: (params) => storeHttp.request("GET", "/audit-logs", auditLogPageSchema, {
6779
7242
  remove: (addressId) => storeHttp.requestVoid("DELETE", path`/seller-addresses/${addressId}`),
6780
7243
  setDefault: (addressId) => storeHttp.requestVoid("POST", path`/seller-addresses/${addressId}/default`)
6781
7244
  },
7245
+ /** 픽업 장소 (이슈 #115) — 방문 수령 주문의 수령 장소. 조회 `store:r`, 쓰기 `store:rw`(상점 플랫폼 OWNER·ADMIN) */
7246
+ pickupLocations: {
7247
+ list: () => storeHttp.request("GET", "/pickup-locations", z.array(pickupLocationSchema)),
7248
+ create: (body) => storeHttp.request("POST", "/pickup-locations", pickupLocationSchema, { body: pickupLocationRequestSchema.parse(body) }),
7249
+ update: (locationId, body) => storeHttp.request("PUT", path`/pickup-locations/${locationId}`, pickupLocationSchema, { body: pickupLocationRequestSchema.parse(body) }),
7250
+ remove: (locationId) => storeHttp.requestVoid("DELETE", path`/pickup-locations/${locationId}`)
7251
+ },
6782
7252
  /**
6783
7253
  * 스토어프론트 호스팅 (이슈 #53) — 조회 `storefront:r`, 쓰기 `storefront:rw`(OWNER·ADMIN).
6784
7254
  * 쓰기 응답은 바뀐 사이트다. Cloudflare 반영은 커밋 뒤라 `provisioning.status`가 잠시 `PENDING`일 수 있다.
@@ -7076,7 +7546,8 @@ const STORE_SCOPE_RESOURCES = {
7076
7546
  customer: ["r", "rw"],
7077
7547
  audit: ["r"],
7078
7548
  promotion: ["r", "rw"],
7079
- storefront: ["r", "rw"]
7549
+ storefront: ["r", "rw"],
7550
+ flow: ["r", "rw"]
7080
7551
  };
7081
7552
  const storeScopeResourceSchema = z.enum(Object.keys(STORE_SCOPE_RESOURCES)).describe("스코프 리소스");
7082
7553
  /** 카탈로그상 존재하는 스코프 문자열인가 (예: `settlement:rw`는 false) */
@@ -7105,7 +7576,8 @@ const STORE_ROLE_SCOPES = {
7105
7576
  "customer:rw",
7106
7577
  "audit:r",
7107
7578
  "promotion:rw",
7108
- "storefront:rw"
7579
+ "storefront:rw",
7580
+ "flow:rw"
7109
7581
  ],
7110
7582
  ADMIN: [
7111
7583
  "product:rw",
@@ -7121,7 +7593,8 @@ const STORE_ROLE_SCOPES = {
7121
7593
  "customer:rw",
7122
7594
  "audit:r",
7123
7595
  "promotion:rw",
7124
- "storefront:rw"
7596
+ "storefront:rw",
7597
+ "flow:rw"
7125
7598
  ],
7126
7599
  STAFF: [
7127
7600
  "product:rw",
@@ -7131,7 +7604,8 @@ const STORE_ROLE_SCOPES = {
7131
7604
  "inquiry:rw",
7132
7605
  "review:rw",
7133
7606
  "customer:r",
7134
- "promotion:r"
7607
+ "promotion:r",
7608
+ "flow:r"
7135
7609
  ]
7136
7610
  };
7137
7611
  //#endregion
@@ -7308,6 +7782,23 @@ const productOutOfStockWebhookEventSchema = z.object({
7308
7782
  type: z.literal("PRODUCT.OUT_OF_STOCK"),
7309
7783
  data: productOutOfStockWebhookEventDataSchema
7310
7784
  });
7785
+ /**
7786
+ * 플로우 알림(이슈 #115) — 상점이 플로우에 둔 알림 블록(`core.notify`, 채널 `webhook`)이 보낸다. 구매자 알림(알림톡·메일)은 이 이벤트를 받아
7787
+ * 상점이 보낸다(플랫폼은 구매자에게 직접 보내지 않는다). 개인정보는 싣지 않는다
7788
+ */
7789
+ const flowNotificationWebhookEventDataSchema = z.object({
7790
+ orderId: z.string().describe("주문 ID"),
7791
+ orderItemIds: z.array(z.string()).describe("이 알림의 주문상품(묶음 진행이면 여럿)"),
7792
+ event: z.string().describe("상점이 블록에 둔 알림 이름(`custom.<이름>`)"),
7793
+ flowId: z.string(),
7794
+ flowVersion: z.number().int(),
7795
+ state: z.string().describe("알림을 보낸 전이의 도착 상태 키")
7796
+ });
7797
+ const flowNotificationWebhookEventSchema = z.object({
7798
+ ...envelopeFields,
7799
+ type: z.literal("ORDER.FLOW_NOTIFICATION"),
7800
+ data: flowNotificationWebhookEventDataSchema
7801
+ });
7311
7802
  /** 웹훅 요청 본문. `type`으로 판별하며 `data` 형태가 타입별로 다르다 */
7312
7803
  const webhookEventSchema = z.discriminatedUnion("type", [
7313
7804
  orderWebhookEventSchema,
@@ -7316,8 +7807,39 @@ const webhookEventSchema = z.discriminatedUnion("type", [
7316
7807
  claimWebhookEventSchema,
7317
7808
  inquiryWebhookEventSchema,
7318
7809
  reviewWebhookEventSchema,
7319
- productOutOfStockWebhookEventSchema
7810
+ productOutOfStockWebhookEventSchema,
7811
+ flowNotificationWebhookEventSchema
7320
7812
  ]).describe("웹훅 요청 본문 (얇은 이벤트). 개인정보를 싣지 않으며 `data`의 id로 관리 API를 조회한다");
7813
+ /**
7814
+ * 알려진 웹훅 이벤트 타입 — `webhookEventSchema`의 판별 값 목록(이 SDK 버전이 아는 것).
7815
+ * 서버는 새 타입을 구독한 엔드포인트에만 보내지만, 구독을 더 넓힌 수신자를 위해 `parseWebhookEvent`가 모르는 타입을 따로 받는다.
7816
+ */
7817
+ const KNOWN_WEBHOOK_EVENT_TYPES = webhookEventSchema.options.flatMap((option) => {
7818
+ const type = option.shape.type;
7819
+ return "options" in type ? [...type.options] : [type.value];
7820
+ });
7821
+ /** 이 SDK 버전이 모르는 이벤트 — 봉투만 검증하고 `data`는 그대로 둔다 */
7822
+ const unknownWebhookEventSchema = z.object({
7823
+ ...envelopeFields,
7824
+ type: z.string().min(1),
7825
+ data: z.unknown()
7826
+ });
7827
+ /**
7828
+ * 웹훅 본문을 `type`으로 먼저 판별해 읽는다(이슈 #115 결정 25). 알려진 타입은 그 타입의 스키마로 엄격하게 읽고 틀리면 던진다 —
7829
+ * `z.union([known, unknown])`처럼 읽으면 알려진 타입의 파싱 실패가 `known: false`로 조용히 새어 수신자가 처리할 이벤트를 버린다.
7830
+ * 모르는 타입은 봉투만 검증해 `known: false`로 돌려준다(새 이벤트에 옛 SDK가 깨지지 않는다).
7831
+ */
7832
+ function parseWebhookEvent(body) {
7833
+ const type = body?.type;
7834
+ if (typeof type === "string" && KNOWN_WEBHOOK_EVENT_TYPES.includes(type)) return {
7835
+ known: true,
7836
+ event: webhookEventSchema.parse(body)
7837
+ };
7838
+ return {
7839
+ known: false,
7840
+ event: unknownWebhookEventSchema.parse(body)
7841
+ };
7842
+ }
7321
7843
  //#endregion
7322
7844
  //#region src/session.ts
7323
7845
  /**
@@ -7498,4 +8020,4 @@ function createStoreSession(options) {
7498
8020
  };
7499
8021
  }
7500
8022
  //#endregion
7501
- export { APPROVAL_ALREADY_DECIDED_CODE, APPROVAL_REQUIRED_CODE, ApiError, ApprovalPendingError, BUSINESS_INFO_MAX_LENGTH, BUSINESS_NUMBER_PATTERN, CASH_RECEIPT_STATUS_VALUES, COLLECTION_BEST_SELLING_DAYS, COLLECTION_PREVIEW_SIZE, COLLECTION_PRODUCT_SORTS, COLLECTION_SALES_SORT_DEFAULT_DAYS, COLLECTION_SLUG_PATTERN, COLLECTION_TYPES, COUPON_CODE_PATTERN, COUPON_CONDITIONS_DEFAULTS, COUPON_TARGET_ALL, COUPON_TARGET_LIST_MAX, CUSTOM_INPUT_FORBIDDEN_WORDS, FULFILLMENT_RULES, MAX_ADDON_GROUPS, MAX_ANALYTICS_ALLOWED_ORIGINS, MAX_AUTO_TRANSITION_DAYS, MAX_COLLECTIONS, MAX_COLLECTION_BEST_SELLING_TOP, MAX_COLLECTION_CREATED_WITHIN_DAYS, MAX_COLLECTION_DESCRIPTION, MAX_COLLECTION_PRODUCTS, MAX_COLLECTION_PRODUCTS_PER_ADD, MAX_COLLECTION_RULES, MAX_COLLECTION_RULE_CATEGORIES, MAX_COLLECTION_TITLE, MAX_CUSTOM_INPUTS, MAX_CUSTOM_INPUT_LENGTH, MAX_OPTION_GROUPS, MAX_PRODUCT_IMAGES, MAX_SAVED_OPTION_SETS, MAX_SAVED_OPTION_SET_NAME, MAX_VALUES_PER_GROUP, MAX_VARIANTS, MCP_TELEMETRY_MAX_RESULTS, MIN_PAYMENT_AMOUNT, NO_COUPON_SETTLEMENT, NO_SHIPPING_BUNDLE_KEY, PAYMENT_ROUTING_EXCLUSION_CODES, POINT_ADJUSTMENT_MAX, POINT_EARN_RATE_BP_MAX, POINT_ENTRY_TYPES, POINT_EXPIRY_DAYS_MAX, POINT_EXPIRY_DAYS_MIN, POINT_LOT_SOURCES, POINT_POLICY_DEFAULTS, POINT_REVIEW_REWARD_MAX, POINT_USE_UNITS, PORTONE_CHANNEL_NAME_MAX_LENGTH, PORTONE_MAX_CHANNELS, PORTONE_MIN_CHANNELS, REFUND_POLICY_DEFAULTS, REFUND_POLICY_DELIVERY_FEE_KEYS, REMOTE_AREA_ZIP_RANGES, RESERVED_STOREFRONT_SLUGS, RESERVED_STORE_CODES, SHIPPING_POLICY_DEFAULTS, STOREFRONT_BLOCKED_PATH_SEGMENTS, STOREFRONT_BUILD_STAGES, STOREFRONT_BUILD_TERMINAL_STATUSES, STOREFRONT_CHECK_TERMINAL_STATUSES, STOREFRONT_CUSTOM_DOMAIN_LIMIT_DEFAULT, STOREFRONT_DOMAIN_DNS_GRACE_DAYS, STOREFRONT_DOMAIN_DNS_WAIT_DAYS, STOREFRONT_DOMAIN_TXT_LABEL, STOREFRONT_EDIT_ACTIVITY_TIMEOUT_MINUTES, STOREFRONT_EDIT_CAPACITY, STOREFRONT_EDIT_IDLE_MINUTES, STOREFRONT_EDIT_PREVIEW_SUFFIX, STOREFRONT_EDIT_START_STAGES, STOREFRONT_FILE_BATCH_MAX, STOREFRONT_FILE_MAX_BYTES, STOREFRONT_PATH_SEGMENT_PATTERN, STOREFRONT_PLATFORM_DOMAINS, STOREFRONT_PUBLIC_SUFFIXES, STOREFRONT_SEARCH_REGEX_MAX_LENGTH, STOREFRONT_SHOWCASE_SLUG_PREFIX, STOREFRONT_SITE_CREATE_LIMIT, STOREFRONT_SLUG_CHANGE_LIMIT, STOREFRONT_SLUG_CHANGE_WINDOW_DAYS, STOREFRONT_SLUG_HOLD_DAYS, STOREFRONT_SLUG_PATTERN, STOREFRONT_SOURCE_BLOB_BATCH_MAX, STOREFRONT_SOURCE_PART_BYTES, STOREFRONT_WORKSPACE_MAX_BYTES, STOREFRONT_WORKSPACE_MAX_FILES, STORE_CODE_PATTERN, STORE_ROLE_SCOPES, STORE_SCOPE_RESOURCES, STORE_SESSION_KEYS, TOSS_WIDGET_CLIENT_KEY_PATTERN, TOSS_WIDGET_KEY_MESSAGE, TOSS_WIDGET_SECRET_KEY_PATTERN, UPLOAD_PURPOSE_LIMITS, VARIANT_COUNT_WARNING, VARIANT_STOCK_EXCLUSIVE_MESSAGE, WEBHOOK_DEFAULT_TOLERANCE_SEC, WEBHOOK_DELIVERY_ID_HEADER, WEBHOOK_EVENT_ID_HEADER, WEBHOOK_EVENT_TYPE_HEADER, WEBHOOK_FAILURE_REASONS, WEBHOOK_HEADERS, WEBHOOK_PAYLOAD_EXCERPT_MAX_BYTES, WEBHOOK_RESOURCE_TYPES, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_USER_AGENT, addStorefrontDomainRequestSchema, addonGroupRequestSchema, addonGroupSchema, addonValueRequestSchema, addonValueSchema, addressChangeRequestListSchema, addressTypeSchema, agentPolicyDecisionSchema, allocateByWeight, analyticsChannelSchema, analyticsCheckoutOutcomeSchema, analyticsCheckoutSchema, analyticsDeviceRowSchema, analyticsDevicesSchema, analyticsFunnelStepSchema, analyticsOriginSchema, analyticsOverviewSchema, analyticsPagesQuerySchema, analyticsPagesSchema, analyticsProductRowSchema, analyticsProductSortSchema, analyticsProductsQuerySchema, analyticsProductsSchema, analyticsRangeQuerySchema, analyticsRealtimeSchema, analyticsSearchQuerySchema, analyticsSearchSchema, analyticsSourceGroupBySchema, analyticsSourceRowSchema, analyticsSourcesQuerySchema, analyticsSourcesSchema, analyticsTotalsSchema, apiLogErrorSchema, apiLogListQuerySchema, apiLogPageSchema, apiLogPrincipalSchema, apiLogPrincipalTypeSchema, apiLogSchema, apiLogStatusFilterSchema, apiLogSummarySchema, approvalDecisionRequestSchema, approvalListQuerySchema, approvalPageSchema, approvalRequestSchema, approvalStatusSchema, approveClaimResultSchema, auditActorSchema, auditActorTypeSchema, auditLogListQuerySchema, auditLogOutcomeSchema, auditLogPageSchema, auditLogSchema, auditLogSourceSchema, bestSellingRuleOf, buildAuthorizeUrl, buildQuery, bulkResultSchema, businessInfoPatchShape, businessInfoResponseShape, businessNumberSchema, cancelBySellerRequestSchema, cancelBySellerResultSchema, carrierSchema, cashReceiptSchema, categoryAttributeSchema, categoryCreateRequestSchema, categoryDeleteQuerySchema, categoryDeleteStrategySchema, categoryListQuerySchema, categoryPatchRequestSchema, categoryProductSortSchema, categorySchema, categorySearchResultSchema, categoryTreeNodeSchema, categoryWithPathSchema, changeStorefrontSlugRequestSchema, changeStorefrontTemplateRequestSchema, changeTypeSchema, claimDetailSchema, claimHoldResultSchema, claimListQuerySchema, claimReasonSchema, claimReturnAddressSchema, claimSchema, claimStatusSchema, claimTypeSchema, claimWebhookEventDataSchema, claimWebhookEventSchema, collectionCreateRequestSchema, collectionListQuerySchema, collectionPageSchema, collectionPatchRequestSchema, collectionPreviewRequestSchema, collectionPreviewSchema, collectionProductListQuerySchema, collectionProductSchema, collectionProductSortRequestSchema, collectionProductsAddRequestSchema, collectionProductsReplaceRequestSchema, collectionRuleCategoryIds, collectionRuleSchema, collectionRuleViewSchema, collectionRulesPredicate, collectionRulesSchema, collectionSchema, collectionStateCountsSchema, collectionStateOf, collectionStateSchema, commerceNumberField, compareBySales, consentActionSchema, consentKindSchema, consentSourceSchema, couponBenefitSchema, couponConditionsInputSchema, couponConditionsSchema, couponDiscountOf, couponIssueListQuerySchema, couponIssueMethodSchema, couponIssueSchema, couponIssueStatusSchema, couponKindSchema, couponListQuerySchema, couponRedemptionListQuerySchema, couponRedemptionSchema, couponRejectReasonSchema, couponRuleSchema, couponSchema, couponStatsSchema, couponStatusSchema, couponTargetInputSchema, couponTargetSchema, createCouponRequestSchema, createPkcePair, createStoreClient, createStoreSession, createStorefrontEditPreviewLinkRequestSchema, createStorefrontPreviewLinkRequestSchema, createStorefrontSiteRequestSchema, createStorefrontVersionRequestSchema, customInputLabelForbiddenWord, customInputRequestSchema, customInputSchema, customInputValueSchema, customerAddressSchema, customerConsentListQuerySchema, customerConsentSchema, customerConsentStateSchema, customerConsentsSchema, customerCouponSchema, customerDelegationRequestSchema, customerDelegationSchema, customerDetailSchema, customerInquiryCategorySchema, customerInquiryListQuerySchema, customerListQuerySchema, customerOrderSchema, customerPointsSchema, customerSortSchema, customerStatsSchema, customerSummarySchema, customerWithdrawalBlockedDetailsSchema, deleteStorefrontFileRequestSchema, deliveryBundleKeyOf, deliveryFeeWaiverSchema, deliveryInfoSchema, deliveryMethodSchema, deliveryStatusSchema, deliveryTypeSchema, descendantCategoryIdsOf, disableStorefrontHostingRequestSchema, discountRequestSchema, discountSchema, dispatchRequestSchema, easyPayProviderResponseSchema, easyPayProviderSchema, eventTypeSchema, exchangeAuthorizationCode, formatOrderNo, fulfillBulkRequestSchema, fulfillRequestSchema, fulfillmentRuleOf, fulfillmentTypeOf, fulfillmentTypeResponseSchema, fulfillmentTypeSchema, holdOrderItemRequestSchema, inquiryListQuerySchema, inquirySchema, inquiryWebhookEventDataSchema, inquiryWebhookEventSchema, invitationDeliveryStatusSchema, invitationListQuerySchema, invitationSchema, inviteMemberRequestSchema, isCouponTargetLine, isEditableStorefrontPath, isReservedStoreCode, isReservedStorefrontSlug, isShowcaseStorefrontSlug, isStoreScope, isWebOrigin, issueCouponRequestSchema, issueCouponResultSchema, liveGateConditionCodeSchema, liveGateConditionSchema, liveGateErrorDetailsSchema, liveGateSchema, loginProviderSchema, loginProviderStatusSchema, loginProviderTestSchema, loginSettingsSchema, maskedSecretSchema, matchesCollectionRules, mcpRuleResultSchema, mcpToolEventSchema, moveStorefrontFileRequestSchema, myAccountSchema, myStoreSchema, normalizeBusinessNumber, normalizeCouponCode, normalizeStorefrontHostname, normalizeStorefrontPath, oauthTokenResponseSchema, openFulfillmentUnion, optionGroupKindSchema, optionGroupRequestSchema, optionGroupSchema, optionModelRequestSchema, optionModelSchema, optionSelectionSchema, optionSortSchema, optionValueRequestSchema, optionValueSchema, orderCanceledWebhookEventDataSchema, orderCanceledWebhookEventSchema, orderDiscountSchema, orderFulfilledWebhookEventDataSchema, orderFulfilledWebhookEventSchema, orderItemFulfillmentSchema, orderItemFulfillmentSnapshotResponseSchema, orderItemFulfillmentSnapshotSchema, orderItemListQuerySchema, orderItemMemoResultSchema, orderItemPageSchema, orderItemSchema, orderItemStatusSchema, orderListQuerySchema, orderSchema, orderSummaryPageSchema, orderSummarySchema, orderWebhookEventDataSchema, orderWebhookEventSchema, pageInfoSchema, pageQueryShape, pageSchema, parseOrderNo, paymentAttemptRecordSchema, paymentAttemptStatusSchema, paymentCredentialSetSchema, paymentFailureWarningSchema, paymentListQuerySchema, paymentProviderSchema, paymentProviderVerificationSchema, paymentRecordDetailSchema, paymentRecordPageSchema, paymentRecordSchema, paymentRecordStatusSchema, paymentRefundRecordSchema, paymentSettingsSchema, pgEnvironmentSchema, pgPaymentMethodSchema, pgProviderSchema, pgVerificationResultSchema, planCodeSchema, planEntitlementsSchema, planErrorDetailsSchema, pointAdjustmentRequestSchema, pointAdjustmentResultSchema, pointEarnOf, pointEarnRateBpSchema, pointEarningEnabled, pointEntrySchema, pointExpiresAtOf, pointHistoryQuerySchema, pointLotSchema, pointPolicyNoticeSchema, pointPolicySchema, pointRestoreExpiresAtOf, pointUseOf, pointUsePolicySchema, policyDocumentUrlSchema, policyVersionSchema, portOneChannelSchema, portOneCredentialsInputSchema, productCreateRequestSchema, productFulfillmentCreateSchema, productFulfillmentResponseSchema, productFulfillmentSchema, productFulfillmentUpdateSchema, productImageRejection, productImageUrlSchema, productListQuerySchema, productOutOfStockWebhookEventDataSchema, productOutOfStockWebhookEventSchema, productPatchRequestSchema, productRefundPolicyOverride, productRefundPolicyPatchSchema, productReplaceRequestSchema, productSchema, productSortSchema, productStatusSchema, productSummarySchema, productVariantRequestSchema, productVariantSchema, proratedPaidRefundBase, proratedPointRefund, proratedRefundBase, publicPlanSchema, publicPlansSchema, publishStorefrontVersionRequestSchema, purchaseDecisionExtendResultSchema, purchaseDecisionRequestResultSchema, purchaseEarnPolicySchema, purchaseEarnRateOf, quoteDelivery, quotePricing, rankBestSelling, refreshUserToken, refundPolicyPatchSchema, refundPolicySchema, rejectClaimRequestSchema, remoteAreaLabelOf, remoteAreaOf, remoteAreaSchema, remoteSurchargeOf, replaceStorefrontSourceRequestSchema, requiresCollection, requiresShipping, resolvePointPolicy, resolveRefundPolicy, resolveShippingPolicy, responsePlanCodeSchema, responsePointEntryTypeSchema, reviewListQuerySchema, reviewReportResultSchema, reviewRewardPointOf, reviewRewardPolicySchema, reviewSchema, reviewSortSchema, reviewWebhookEventDataSchema, reviewWebhookEventSchema, rollbackStorefrontRequestSchema, runStorefrontCheckRequestSchema, salesReportGroupBySchema, salesReportQuerySchema, salesReportRowSchema, salesReportSchema, salesTotalsSchema, saveLoginProviderRequestSchema, savedCustomInputRequestSchema, savedCustomInputSchema, savedOptionGroupRequestSchema, savedOptionGroupSchema, savedOptionSetCompositionSchema, savedOptionSetFromProductRequestSchema, savedOptionSetFromProductResultSchema, savedOptionSetListQuerySchema, savedOptionSetRequestSchema, savedOptionSetSchema, savedOptionSetSortSchema, savedOptionValueRequestSchema, savedOptionValueSchema, scopeAccessSchema, searchStorefrontFilesRequestSchema, sellerAddressListQuerySchema, sellerAddressRequestSchema, sellerAddressSchema, sellerCustomerInquirySchema, setStorefrontVisibilityRequestSchema, settleCouponShortfall, settlementDetailQuerySchema, settlementDetailSchema, settlementListQuerySchema, settlementStatusSchema, settlementSummarySchema, settlementWithDetailsSchema, shippingAddressSchema, shippingPolicyPatchSchema, shippingPolicySchema, splitRefund, storeCodeSchema, storeMemberRoleUpdatedSchema, storeMemberSchema, storePointPolicySchema, storeRoleSchema, storeSchema, storeScopeResourceSchema, storeSubscriptionSchema, storefrontBuildDependenciesSchema, storefrontBuildListQuerySchema, storefrontBuildSchema, storefrontBuildStatusSchema, storefrontCheckSchema, storefrontCheckStatusSchema, storefrontCustomDomainStatusSchema, storefrontCustomHostnameProblem, storefrontDependencyFindingSchema, storefrontDeploymentLogSchema, storefrontDeploymentSchema, storefrontDeploymentStepSchema, storefrontDnsRecordSchema, storefrontDomainSchema, storefrontDomainTxtNameOf, storefrontEditPreviewLabelOf, storefrontEditPreviewSchema, storefrontEditSessionSchema, storefrontEditSessionStatusSchema, storefrontEditingSchema, storefrontFileConflictDetailsSchema, storefrontFileContentQuerySchema, storefrontFileContentSchema, storefrontFileDeleteResultSchema, storefrontFileEncodingSchema, storefrontFileEntrySchema, storefrontFileHashSchema, storefrontFileListQuerySchema, storefrontFileListSchema, storefrontFileMoveResultSchema, storefrontFilePathSchema, storefrontFileSearchResultSchema, storefrontFileWriteResultSchema, storefrontHostingSchema, storefrontPreviewLinkSchema, storefrontProvisioningSchema, storefrontRuleResultSchema, storefrontRuleSeveritySchema, storefrontSiteDomainSchema, storefrontSiteDomainsSchema, storefrontSiteSchema, storefrontSiteStatusSchema, storefrontSlugAvailabilityQuerySchema, storefrontSlugAvailabilitySchema, storefrontSlugSchema, storefrontSourceArchivePartSchema, storefrontSourceArchiveQuerySchema, storefrontSourceBlobsResultSchema, storefrontSourceModeSchema, storefrontSourceRefSchema, storefrontSourceReplacedSchema, storefrontSourceSchema, storefrontSuspensionSchema, storefrontTemplateSchema, storefrontVerifyReportSchema, storefrontVersionCreatedSchema, storefrontVersionSchema, storefrontVersionStatusSchema, storefrontVisibilitySchema, subscriptionLimitsSchema, subscriptionStatusSchema, subscriptionUsageSchema, tossPaymentsCredentialsInputSchema, trackingStageResponseSchema, trackingUpdateResultSchema, updateCouponRequestSchema, updateLoginProviderRequestSchema, updateLoginSettingsRequestSchema, updateMemberRoleRequestSchema, updatePaymentProviderRequestSchema, updatePaymentSettingsRequestSchema, updatePointPolicyRequestSchema, updateStoreRequestSchema, uploadExtensionOf, uploadPurposeSchema, uploadRejection, uploadRequestSchema, uploadStorefrontSourceBlobsRequestSchema, uploadTicketSchema, upsertPortOneProviderRequestSchema, upsertTossPaymentsProviderRequestSchema, variantStockRequestSchema, variantStockSchema, verifyPaymentProviderRequestSchema, webhookCreatedSchema, webhookDeliveryDetailSchema, webhookDeliveryErrorCodeSchema, webhookDeliveryListQuerySchema, webhookDeliveryResourceSchema, webhookDeliverySchema, webhookDeliveryStatusSchema, webhookEventSchema, webhookFailureReasonSchema, webhookRedeliverFailedResultSchema, webhookRequestHeaderSchema, webhookRequestSchema, webhookResourceTypeSchema, webhookSchema, webhookSecretRotatedSchema, webhookStatusSchema, webhookTestRequestSchema, webhookTestResultSchema, withdrawCustomerRequestSchema, writeDryRunResultSchema, writePreviewSchema, writeStorefrontFilesRequestSchema };
8023
+ export { APPROVAL_ALREADY_DECIDED_CODE, APPROVAL_REQUIRED_CODE, ApiError, ApprovalPendingError, BUSINESS_INFO_MAX_LENGTH, BUSINESS_NUMBER_PATTERN, CASH_RECEIPT_STATUS_VALUES, COLLECTION_BEST_SELLING_DAYS, COLLECTION_PREVIEW_SIZE, COLLECTION_PRODUCT_SORTS, COLLECTION_SALES_SORT_DEFAULT_DAYS, COLLECTION_SLUG_PATTERN, COLLECTION_TYPES, COUPON_CODE_PATTERN, COUPON_CONDITIONS_DEFAULTS, COUPON_TARGET_ALL, COUPON_TARGET_LIST_MAX, CUSTOM_INPUT_FORBIDDEN_WORDS, CUSTOM_INPUT_TYPES, FULFILLMENT_METHODS, FULFILLMENT_METHODS_BY_TYPE, FULFILLMENT_METHOD_RULES, FULFILLMENT_RULES, KNOWN_WEBHOOK_EVENT_TYPES, MAX_ADDON_GROUPS, MAX_ANALYTICS_ALLOWED_ORIGINS, MAX_AUTO_TRANSITION_DAYS, MAX_CALENDAR_DAYS, MAX_COLLECTIONS, MAX_COLLECTION_BEST_SELLING_TOP, MAX_COLLECTION_CREATED_WITHIN_DAYS, MAX_COLLECTION_DESCRIPTION, MAX_COLLECTION_PRODUCTS, MAX_COLLECTION_PRODUCTS_PER_ADD, MAX_COLLECTION_RULES, MAX_COLLECTION_RULE_CATEGORIES, MAX_COLLECTION_TITLE, MAX_CUSTOM_INPUTS, MAX_CUSTOM_INPUT_LENGTH, MAX_OPTION_GROUPS, MAX_PICKUP_LOCATIONS, MAX_PRODUCT_IMAGES, MAX_SAVED_OPTION_SETS, MAX_SAVED_OPTION_SET_NAME, MAX_STAY_NIGHTS, MAX_VALUES_PER_GROUP, MAX_VARIANTS, MCP_TELEMETRY_MAX_RESULTS, MIN_PAYMENT_AMOUNT, NO_COUPON_SETTLEMENT, NO_SHIPPING_BUNDLE_KEY, PAYMENT_ROUTING_EXCLUSION_CODES, POINT_ADJUSTMENT_MAX, POINT_EARN_RATE_BP_MAX, POINT_ENTRY_TYPES, POINT_EXPIRY_DAYS_MAX, POINT_EXPIRY_DAYS_MIN, POINT_LOT_SOURCES, POINT_POLICY_DEFAULTS, POINT_REVIEW_REWARD_MAX, POINT_USE_UNITS, PORTONE_CHANNEL_NAME_MAX_LENGTH, PORTONE_MAX_CHANNELS, PORTONE_MIN_CHANNELS, REFUND_POLICY_DEFAULTS, REFUND_POLICY_DELIVERY_FEE_KEYS, REMOTE_AREA_ZIP_RANGES, RESERVED_STOREFRONT_SLUGS, RESERVED_STORE_CODES, SHIPPING_POLICY_DEFAULTS, STOREFRONT_BLOCKED_PATH_SEGMENTS, STOREFRONT_BUILD_STAGES, STOREFRONT_BUILD_TERMINAL_STATUSES, STOREFRONT_CHECK_TERMINAL_STATUSES, STOREFRONT_CUSTOM_DOMAIN_LIMIT_DEFAULT, STOREFRONT_DOMAIN_DNS_GRACE_DAYS, STOREFRONT_DOMAIN_DNS_WAIT_DAYS, STOREFRONT_DOMAIN_TXT_LABEL, STOREFRONT_EDIT_ACTIVITY_TIMEOUT_MINUTES, STOREFRONT_EDIT_CAPACITY, STOREFRONT_EDIT_IDLE_MINUTES, STOREFRONT_EDIT_PREVIEW_SUFFIX, STOREFRONT_EDIT_START_STAGES, STOREFRONT_FILE_BATCH_MAX, STOREFRONT_FILE_MAX_BYTES, STOREFRONT_PATH_SEGMENT_PATTERN, STOREFRONT_PLATFORM_DOMAINS, STOREFRONT_PUBLIC_SUFFIXES, STOREFRONT_SEARCH_REGEX_MAX_LENGTH, STOREFRONT_SHOWCASE_SLUG_PREFIX, STOREFRONT_SITE_CREATE_LIMIT, STOREFRONT_SLUG_CHANGE_LIMIT, STOREFRONT_SLUG_CHANGE_WINDOW_DAYS, STOREFRONT_SLUG_HOLD_DAYS, STOREFRONT_SLUG_PATTERN, STOREFRONT_SOURCE_BLOB_BATCH_MAX, STOREFRONT_SOURCE_PART_BYTES, STOREFRONT_WORKSPACE_MAX_BYTES, STOREFRONT_WORKSPACE_MAX_FILES, STORE_CODE_PATTERN, STORE_ROLE_SCOPES, STORE_SCOPE_RESOURCES, STORE_SESSION_KEYS, TOSS_WIDGET_CLIENT_KEY_PATTERN, TOSS_WIDGET_KEY_MESSAGE, TOSS_WIDGET_SECRET_KEY_PATTERN, UPLOAD_PURPOSE_LIMITS, VARIANT_COUNT_WARNING, VARIANT_STOCK_EXCLUSIVE_MESSAGE, WEBHOOK_DEFAULT_TOLERANCE_SEC, WEBHOOK_DELIVERY_ID_HEADER, WEBHOOK_EVENT_ID_HEADER, WEBHOOK_EVENT_TYPE_HEADER, WEBHOOK_FAILURE_REASONS, WEBHOOK_HEADERS, WEBHOOK_PAYLOAD_EXCERPT_MAX_BYTES, WEBHOOK_RESOURCE_TYPES, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_USER_AGENT, addStorefrontDomainRequestSchema, addonGroupRequestSchema, addonGroupSchema, addonValueRequestSchema, addonValueSchema, addressChangeRequestListSchema, addressTypeSchema, agentPolicyDecisionSchema, allocateByWeight, analyticsChannelSchema, analyticsCheckoutOutcomeSchema, analyticsCheckoutSchema, analyticsDeviceRowSchema, analyticsDevicesSchema, analyticsFunnelStepSchema, analyticsOriginSchema, analyticsOverviewSchema, analyticsPagesQuerySchema, analyticsPagesSchema, analyticsProductRowSchema, analyticsProductSortSchema, analyticsProductsQuerySchema, analyticsProductsSchema, analyticsRangeQuerySchema, analyticsRealtimeSchema, analyticsSearchQuerySchema, analyticsSearchSchema, analyticsSourceGroupBySchema, analyticsSourceRowSchema, analyticsSourcesQuerySchema, analyticsSourcesSchema, analyticsTotalsSchema, apiLogErrorSchema, apiLogListQuerySchema, apiLogPageSchema, apiLogPrincipalSchema, apiLogPrincipalTypeSchema, apiLogSchema, apiLogStatusFilterSchema, apiLogSummarySchema, approvalDecisionRequestSchema, approvalListQuerySchema, approvalPageSchema, approvalRequestSchema, approvalStatusSchema, approveClaimResultSchema, auditActorSchema, auditActorTypeSchema, auditLogListQuerySchema, auditLogOutcomeSchema, auditLogPageSchema, auditLogSchema, auditLogSourceSchema, bestSellingRuleOf, buildAuthorizeUrl, buildQuery, bulkResultSchema, businessInfoPatchShape, businessInfoResponseShape, businessNumberSchema, calendarDateSchema, calendarDaySchema, calendarQuerySchema, cancelBySellerRequestSchema, cancelBySellerResultSchema, carrierSchema, cashReceiptSchema, categoryAttributeSchema, categoryCreateRequestSchema, categoryDeleteQuerySchema, categoryDeleteStrategySchema, categoryListQuerySchema, categoryPatchRequestSchema, categoryProductSortSchema, categorySchema, categorySearchResultSchema, categoryTreeNodeSchema, categoryWithPathSchema, changeStorefrontSlugRequestSchema, changeStorefrontTemplateRequestSchema, changeTypeSchema, claimDetailSchema, claimHoldResultSchema, claimListQuerySchema, claimReasonSchema, claimReturnAddressSchema, claimSchema, claimStatusSchema, claimTypeSchema, claimWebhookEventDataSchema, claimWebhookEventSchema, collectionCreateRequestSchema, collectionListQuerySchema, collectionPageSchema, collectionPatchRequestSchema, collectionPreviewRequestSchema, collectionPreviewSchema, collectionProductListQuerySchema, collectionProductSchema, collectionProductSortRequestSchema, collectionProductsAddRequestSchema, collectionProductsReplaceRequestSchema, collectionRuleCategoryIds, collectionRuleSchema, collectionRuleViewSchema, collectionRulesPredicate, collectionRulesSchema, collectionSchema, collectionStateCountsSchema, collectionStateOf, collectionStateSchema, commerceFlowCheckSchema, commerceFlowSchema, commerceFlowSummarySchema, commerceFlowVersionViewSchema, commerceNumberField, compareBySales, consentActionSchema, consentKindSchema, consentSourceSchema, couponBenefitSchema, couponConditionsInputSchema, couponConditionsSchema, couponDiscountOf, couponIssueListQuerySchema, couponIssueMethodSchema, couponIssueSchema, couponIssueStatusSchema, couponKindSchema, couponListQuerySchema, couponRedemptionListQuerySchema, couponRedemptionSchema, couponRejectReasonSchema, couponRuleSchema, couponSchema, couponStatsSchema, couponStatusSchema, couponTargetInputSchema, couponTargetSchema, createCommerceFlowRequestSchema, createCouponRequestSchema, createPkcePair, createStoreClient, createStoreSession, createStorefrontEditPreviewLinkRequestSchema, createStorefrontPreviewLinkRequestSchema, createStorefrontSiteRequestSchema, createStorefrontVersionRequestSchema, customInputLabelForbiddenWord, customInputRequestSchema, customInputSchema, customInputValueSchema, customerAddressSchema, customerConsentListQuerySchema, customerConsentSchema, customerConsentStateSchema, customerConsentsSchema, customerCouponSchema, customerDelegationRequestSchema, customerDelegationSchema, customerDetailSchema, customerInquiryCategorySchema, customerInquiryListQuerySchema, customerListQuerySchema, customerOrderSchema, customerPointsSchema, customerSortSchema, customerStatsSchema, customerSummarySchema, customerWithdrawalBlockedDetailsSchema, defaultFulfillmentMethodOf, deleteStorefrontFileRequestSchema, deliveryBundleKeyOf, deliveryFeeWaiverSchema, deliveryInfoSchema, deliveryMethodSchema, deliveryStatusSchema, deliveryTypeSchema, descendantCategoryIdsOf, disableStorefrontHostingRequestSchema, discountRequestSchema, discountSchema, dispatchRequestSchema, easyPayProviderResponseSchema, easyPayProviderSchema, eventTypeSchema, exchangeAuthorizationCode, flowActionRequestSchema, flowActionResultSchema, flowActionSchema, flowFieldValueSchema, flowInputFieldSchema, flowNotificationWebhookEventDataSchema, flowNotificationWebhookEventSchema, flowPresetSummarySchema, flowSecretNameSchema, flowSecretSchema, flowStateSchema, formatOrderNo, fulfillBulkRequestSchema, fulfillRequestSchema, fulfillmentMethodOf, fulfillmentMethodSchema, fulfillmentMethodsOf, fulfillmentRuleOf, fulfillmentTypeOf, fulfillmentTypeResponseSchema, fulfillmentTypeSchema, holdOrderItemRequestSchema, inquiryListQuerySchema, inquirySchema, inquiryWebhookEventDataSchema, inquiryWebhookEventSchema, inventoryModeSchema, invitationDeliveryStatusSchema, invitationListQuerySchema, invitationSchema, inviteMemberRequestSchema, isCouponTargetLine, isEditableStorefrontPath, isReservedStoreCode, isReservedStorefrontSlug, isShowcaseStorefrontSlug, isStoreScope, isWebOrigin, issueCouponRequestSchema, issueCouponResultSchema, liveGateConditionCodeSchema, liveGateConditionSchema, liveGateErrorDetailsSchema, liveGateSchema, loginProviderSchema, loginProviderStatusSchema, loginProviderTestSchema, loginSettingsSchema, maskedSecretSchema, matchesCollectionRules, mcpRuleResultSchema, mcpToolEventSchema, moveStorefrontFileRequestSchema, myAccountSchema, myStoreSchema, nightsOf, normalizeBusinessNumber, normalizeCouponCode, normalizeStorefrontHostname, normalizeStorefrontPath, oauthTokenResponseSchema, openFulfillmentUnion, optionGroupKindSchema, optionGroupRequestSchema, optionGroupSchema, optionModelRequestSchema, optionModelSchema, optionSelectionSchema, optionSortSchema, optionValueRequestSchema, optionValueSchema, orderCanceledWebhookEventDataSchema, orderCanceledWebhookEventSchema, orderDiscountSchema, orderFulfilledWebhookEventDataSchema, orderFulfilledWebhookEventSchema, orderItemFlowSchema, orderItemFulfillmentSchema, orderItemFulfillmentSnapshotResponseSchema, orderItemFulfillmentSnapshotSchema, orderItemListQuerySchema, orderItemMemoResultSchema, orderItemPageSchema, orderItemSchema, orderItemStatusSchema, orderListQuerySchema, orderSchema, orderSummaryPageSchema, orderSummarySchema, orderWebhookEventDataSchema, orderWebhookEventSchema, pageInfoSchema, pageQueryShape, pageSchema, parseOrderNo, parseWebhookEvent, paymentAttemptRecordSchema, paymentAttemptStatusSchema, paymentCredentialSetSchema, paymentFailureWarningSchema, paymentListQuerySchema, paymentProviderSchema, paymentProviderVerificationSchema, paymentRecordDetailSchema, paymentRecordPageSchema, paymentRecordSchema, paymentRecordStatusSchema, paymentRefundRecordSchema, paymentSettingsSchema, pgEnvironmentSchema, pgPaymentMethodSchema, pgProviderSchema, pgVerificationResultSchema, pickupLocationRequestSchema, pickupLocationSchema, pickupLocationSnapshotSchema, planCodeSchema, planEntitlementsSchema, planErrorDetailsSchema, pointAdjustmentRequestSchema, pointAdjustmentResultSchema, pointEarnOf, pointEarnRateBpSchema, pointEarningEnabled, pointEntrySchema, pointExpiresAtOf, pointHistoryQuerySchema, pointLotSchema, pointPolicyNoticeSchema, pointPolicySchema, pointRestoreExpiresAtOf, pointUseOf, pointUsePolicySchema, policyDocumentUrlSchema, policyVersionSchema, portOneChannelSchema, portOneCredentialsInputSchema, productCreateRequestSchema, productFulfillmentCreateSchema, productFulfillmentResponseSchema, productFulfillmentSchema, productFulfillmentUpdateSchema, productImageRejection, productImageUrlSchema, productListQuerySchema, productOutOfStockWebhookEventDataSchema, productOutOfStockWebhookEventSchema, productPatchRequestSchema, productRefundPolicyOverride, productRefundPolicyPatchSchema, productReplaceRequestSchema, productSchema, productSortSchema, productStatusSchema, productSummarySchema, productVariantRequestSchema, productVariantSchema, proratedPaidRefundBase, proratedPointRefund, proratedRefundBase, publicPlanSchema, publicPlansSchema, publishStorefrontVersionRequestSchema, purchaseDecisionExtendResultSchema, purchaseDecisionRequestResultSchema, purchaseEarnPolicySchema, purchaseEarnRateOf, quoteDelivery, quotePricing, rankBestSelling, refreshUserToken, refundPolicyPatchSchema, refundPolicySchema, rejectClaimRequestSchema, remoteAreaLabelOf, remoteAreaOf, remoteAreaSchema, remoteSurchargeOf, replaceStorefrontSourceRequestSchema, requiresCollection, requiresShipping, resolvePointPolicy, resolveRefundPolicy, resolveShippingPolicy, resolvedFlowSchema, responsePlanCodeSchema, responsePointEntryTypeSchema, reviewListQuerySchema, reviewReportResultSchema, reviewRewardPointOf, reviewRewardPolicySchema, reviewSchema, reviewSortSchema, reviewWebhookEventDataSchema, reviewWebhookEventSchema, rollbackStorefrontRequestSchema, runStorefrontCheckRequestSchema, salesReportGroupBySchema, salesReportQuerySchema, salesReportRowSchema, salesReportSchema, salesTotalsSchema, saveFlowDraftRequestSchema, saveFlowSecretRequestSchema, saveLoginProviderRequestSchema, savedCustomInputRequestSchema, savedCustomInputSchema, savedOptionGroupRequestSchema, savedOptionGroupSchema, savedOptionSetCompositionSchema, savedOptionSetFromProductRequestSchema, savedOptionSetFromProductResultSchema, savedOptionSetListQuerySchema, savedOptionSetRequestSchema, savedOptionSetSchema, savedOptionSetSortSchema, savedOptionValueRequestSchema, savedOptionValueSchema, scopeAccessSchema, searchStorefrontFilesRequestSchema, sellerAddressListQuerySchema, sellerAddressRequestSchema, sellerAddressSchema, sellerCustomerInquirySchema, setCalendarRequestSchema, setStorefrontVisibilityRequestSchema, settleCouponShortfall, settlementDetailQuerySchema, settlementDetailSchema, settlementListQuerySchema, settlementStatusSchema, settlementSummarySchema, settlementWithDetailsSchema, shippingAddressSchema, shippingPolicyPatchSchema, shippingPolicySchema, splitRefund, stayRangeSchema, staySnapshotSchema, storeCodeSchema, storeMemberRoleUpdatedSchema, storeMemberSchema, storePointPolicySchema, storeRoleSchema, storeSchema, storeScopeResourceSchema, storeSubscriptionSchema, storefrontBuildDependenciesSchema, storefrontBuildListQuerySchema, storefrontBuildSchema, storefrontBuildStatusSchema, storefrontCheckSchema, storefrontCheckStatusSchema, storefrontCustomDomainStatusSchema, storefrontCustomHostnameProblem, storefrontDependencyFindingSchema, storefrontDeploymentLogSchema, storefrontDeploymentSchema, storefrontDeploymentStepSchema, storefrontDnsRecordSchema, storefrontDomainSchema, storefrontDomainTxtNameOf, storefrontEditPreviewLabelOf, storefrontEditPreviewSchema, storefrontEditSessionSchema, storefrontEditSessionStatusSchema, storefrontEditingSchema, storefrontFileConflictDetailsSchema, storefrontFileContentQuerySchema, storefrontFileContentSchema, storefrontFileDeleteResultSchema, storefrontFileEncodingSchema, storefrontFileEntrySchema, storefrontFileHashSchema, storefrontFileListQuerySchema, storefrontFileListSchema, storefrontFileMoveResultSchema, storefrontFilePathSchema, storefrontFileSearchResultSchema, storefrontFileWriteResultSchema, storefrontHostingSchema, storefrontPreviewLinkSchema, storefrontProvisioningSchema, storefrontRuleResultSchema, storefrontRuleSeveritySchema, storefrontSiteDomainSchema, storefrontSiteDomainsSchema, storefrontSiteSchema, storefrontSiteStatusSchema, storefrontSlugAvailabilityQuerySchema, storefrontSlugAvailabilitySchema, storefrontSlugSchema, storefrontSourceArchivePartSchema, storefrontSourceArchiveQuerySchema, storefrontSourceBlobsResultSchema, storefrontSourceModeSchema, storefrontSourceRefSchema, storefrontSourceReplacedSchema, storefrontSourceSchema, storefrontSuspensionSchema, storefrontTemplateSchema, storefrontVerifyReportSchema, storefrontVersionCreatedSchema, storefrontVersionSchema, storefrontVersionStatusSchema, storefrontVisibilitySchema, subscriptionLimitsSchema, subscriptionStatusSchema, subscriptionUsageSchema, tossPaymentsCredentialsInputSchema, trackingStageResponseSchema, trackingUpdateResultSchema, unknownWebhookEventSchema, updateCouponRequestSchema, updateLoginProviderRequestSchema, updateLoginSettingsRequestSchema, updateMemberRoleRequestSchema, updatePaymentProviderRequestSchema, updatePaymentSettingsRequestSchema, updatePointPolicyRequestSchema, updateStoreRequestSchema, uploadExtensionOf, uploadPurposeSchema, uploadRejection, uploadRequestSchema, uploadStorefrontSourceBlobsRequestSchema, uploadTicketSchema, upsertPortOneProviderRequestSchema, upsertTossPaymentsProviderRequestSchema, variantStockRequestSchema, variantStockSchema, verifyPaymentProviderRequestSchema, webhookCreatedSchema, webhookDeliveryDetailSchema, webhookDeliveryErrorCodeSchema, webhookDeliveryListQuerySchema, webhookDeliveryResourceSchema, webhookDeliverySchema, webhookDeliveryStatusSchema, webhookEventSchema, webhookFailureReasonSchema, webhookRedeliverFailedResultSchema, webhookRequestHeaderSchema, webhookRequestSchema, webhookResourceTypeSchema, webhookSchema, webhookSecretRotatedSchema, webhookStatusSchema, webhookTestRequestSchema, webhookTestResultSchema, withdrawCustomerRequestSchema, writeDryRunResultSchema, writePreviewSchema, writeStorefrontFilesRequestSchema };