@sayren/store-sdk 0.29.7 → 0.29.8

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
@@ -979,9 +979,73 @@ function fulfillmentTypeOf(value) {
979
979
  function fulfillmentRuleOf(type) {
980
980
  return FULFILLMENT_RULES[fulfillmentTypeOf(type)];
981
981
  }
982
- /** 택배 배송이 필요한가 — 배송비 묶음·배송지·발송 흐름의 판정은 이 함수 하나를 지난다 */
983
- function requiresShipping(type) {
984
- return fulfillmentRuleOf(type).requiresShipping;
982
+ /**
983
+ * 이행 방식.
984
+ * - `CARRIER` 택배(송장·배송 추적)
985
+ * - `DIRECT` 직접 배달(배송지 있음, 송장 없음)
986
+ * - `PICKUP` 방문 수령(배송지·배송비 없음)
987
+ * - `PROVIDED` 제공 처리(배송 없는 상품)
988
+ */
989
+ const FULFILLMENT_METHODS = [
990
+ "CARRIER",
991
+ "DIRECT",
992
+ "PICKUP",
993
+ "PROVIDED"
994
+ ];
995
+ const fulfillmentMethodSchema = z.enum(FULFILLMENT_METHODS);
996
+ /** 방식별 규칙표 — **유일한 원천이다.** */
997
+ const FULFILLMENT_METHOD_RULES = {
998
+ CARRIER: {
999
+ requiresAddress: true,
1000
+ carrierTracking: true,
1001
+ pickupLocation: false
1002
+ },
1003
+ DIRECT: {
1004
+ requiresAddress: true,
1005
+ carrierTracking: false,
1006
+ pickupLocation: false
1007
+ },
1008
+ PICKUP: {
1009
+ requiresAddress: false,
1010
+ carrierTracking: false,
1011
+ pickupLocation: true
1012
+ },
1013
+ PROVIDED: {
1014
+ requiresAddress: false,
1015
+ carrierTracking: false,
1016
+ pickupLocation: false
1017
+ }
1018
+ };
1019
+ /** 유형별 허용 방식 — 첫 값이 유형 기본이다 */
1020
+ const FULFILLMENT_METHODS_BY_TYPE = {
1021
+ SHIPPING: [
1022
+ "CARRIER",
1023
+ "DIRECT",
1024
+ "PICKUP"
1025
+ ],
1026
+ MANUAL: ["PROVIDED", "PICKUP"]
1027
+ };
1028
+ /** 유형의 기본 방식 — 허용 방식을 두지 않은 상품·이 필드 이전 주문상품 */
1029
+ function defaultFulfillmentMethodOf(type) {
1030
+ return FULFILLMENT_METHODS_BY_TYPE[fulfillmentTypeOf(type)][0];
1031
+ }
1032
+ /** 상품의 허용 방식 — 두지 않았으면 유형 기본 하나다 */
1033
+ function fulfillmentMethodsOf(fulfillment) {
1034
+ const methods = (fulfillment.methods ?? []).filter((m) => FULFILLMENT_METHODS.includes(m));
1035
+ return methods.length > 0 ? methods : [defaultFulfillmentMethodOf(fulfillment.type)];
1036
+ }
1037
+ /** 저장된 방식 → 방식. null·모르는 값은 유형 기본이다 */
1038
+ function fulfillmentMethodOf(type, method) {
1039
+ const parsed = fulfillmentMethodSchema.safeParse(method);
1040
+ return parsed.success ? parsed.data : defaultFulfillmentMethodOf(type);
1041
+ }
1042
+ /**
1043
+ * 택배 배송이 필요한가 — 배송비 묶음·배송지·발송 흐름의 판정은 이 함수 하나를 지난다.
1044
+ * 방식을 주면 방식 규칙도 본다(배송 상품의 방문 수령은 배송이 없다). 방식을 모르면 유형 규칙만 본다.
1045
+ */
1046
+ function requiresShipping(type, method) {
1047
+ if (!fulfillmentRuleOf(type).requiresShipping) return false;
1048
+ return method == null || FULFILLMENT_METHOD_RULES[fulfillmentMethodOf(type, method)].requiresAddress;
985
1049
  }
986
1050
  /** 반품에 수거가 필요한가 — 비실물 반품은 수거 등록·수거 완료 없이 승인한다 */
987
1051
  function requiresCollection(type) {
@@ -1030,6 +1094,11 @@ function refineShippingConsistency(value, ctx) {
1030
1094
  });
1031
1095
  }
1032
1096
  const deliveryTypeDescription = "배송비 유형. `FREE` 무료, `PAID` 유료, `CONDITIONAL_FREE` 조건부 무료";
1097
+ /** 요청의 허용 방식 — 유형마다 받는 값이 다르다. 겹치면 400 */
1098
+ function methodsRequestSchema(type) {
1099
+ 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`"}), 수정은 지금 값 유지(유형을 바꾸면 유형 기본)`);
1100
+ }
1101
+ const storedMethodsSchema = z.array(z.string()).optional().describe("허용 이행 방식(이슈 #115). 현재 값은 `CARRIER`·`DIRECT`·`PICKUP`·`PROVIDED`이고 값이 추가될 수 있어 문자열로 받는다. 셀러가 두지 않았으면 생략되고 유형 기본(`SHIPPING`은 `CARRIER`, `MANUAL`은 `PROVIDED`)이다");
1033
1102
  const shippingCreateSchema = z.strictObject({
1034
1103
  deliveryType: deliveryTypeSchema.default("PAID").describe(deliveryTypeDescription),
1035
1104
  deliveryFee: z.number().int().min(0).optional().describe("배송비. 원 단위. 생략하면 상점 기본 배송비(`GET /v1/store`의 `shippingPolicy.baseDeliveryFee`)를 저장한다. FREE면 0이거나 생략한다"),
@@ -1042,8 +1111,12 @@ const shippingCreateSchema = z.strictObject({
1042
1111
  */
1043
1112
  const productFulfillmentCreateSchema = z.discriminatedUnion("type", [z.strictObject({
1044
1113
  type: z.literal("SHIPPING"),
1045
- shipping: shippingCreateSchema.optional()
1046
- }), z.strictObject({ type: z.literal("MANUAL") })]);
1114
+ shipping: shippingCreateSchema.optional(),
1115
+ methods: methodsRequestSchema("SHIPPING").optional()
1116
+ }), z.strictObject({
1117
+ type: z.literal("MANUAL"),
1118
+ methods: methodsRequestSchema("MANUAL").optional()
1119
+ })]);
1047
1120
  const shippingUpdateSchema = z.strictObject({
1048
1121
  deliveryType: deliveryTypeSchema.describe(deliveryTypeDescription),
1049
1122
  deliveryFee: z.number().int().min(0).describe("배송비. 원 단위. FREE면 0"),
@@ -1057,8 +1130,12 @@ const shippingUpdateSchema = z.strictObject({
1057
1130
  */
1058
1131
  const productFulfillmentUpdateSchema = z.discriminatedUnion("type", [z.strictObject({
1059
1132
  type: z.literal("SHIPPING"),
1060
- shipping: shippingUpdateSchema
1061
- }), z.strictObject({ type: z.literal("MANUAL") })]);
1133
+ shipping: shippingUpdateSchema,
1134
+ methods: methodsRequestSchema("SHIPPING").optional()
1135
+ }), z.strictObject({
1136
+ type: z.literal("MANUAL"),
1137
+ methods: methodsRequestSchema("MANUAL").optional()
1138
+ })]);
1062
1139
  /**
1063
1140
  * 저장된 상품 이행 — 알려진 유형의 닫힌 유니온. 서버의 상품 엔티티와 응답이 이 모양을 쓴다.
1064
1141
  * 응답 파싱은 `productFulfillmentResponseSchema`(열린 유니온)를 쓴다.
@@ -1071,8 +1148,12 @@ const productFulfillmentSchema = z.discriminatedUnion("type", [z.object({
1071
1148
  conditionalFreeAmount: z.number().int().nullable().describe("조건부 무료 기준 묶음 소계. CONDITIONAL_FREE가 아니면 null"),
1072
1149
  shippingAddressId: z.string().nullable().describe("출고지 주소 id. null이면 상점 기본 출고지를 따른다"),
1073
1150
  returnAddressId: z.string().nullable().describe("반품지 주소 id. null이면 상점 기본 반품지를 따른다")
1074
- })
1075
- }), z.object({ type: z.literal("MANUAL") })]);
1151
+ }),
1152
+ methods: storedMethodsSchema
1153
+ }), z.object({
1154
+ type: z.literal("MANUAL"),
1155
+ methods: storedMethodsSchema
1156
+ })]);
1076
1157
  /**
1077
1158
  * 열린 응답 유니온 — 알려진 유형은 판별 유니온으로 검사하고, **모르는 유형만** `{ type: "OTHER", rawType }`로 읽는다.
1078
1159
  *
@@ -1086,6 +1167,16 @@ function openFulfillmentUnion(known) {
1086
1167
  }))]);
1087
1168
  }
1088
1169
  const productFulfillmentResponseSchema = openFulfillmentUnion(productFulfillmentSchema).describe("상품 이행. `type`이 유형이고 같은 이름의 키가 유형별 속성이다. 값이 추가될 수 있어 SDK는 모르는 유형을 `{ type: \"OTHER\", rawType }`로 읽는다");
1170
+ const snapshotMethodSchema = z.string().optional().describe("주문 시점 이행 방식(이슈 #115). 현재 값은 `CARRIER`·`DIRECT`·`PICKUP`·`PROVIDED`이고 값이 추가될 수 있어 문자열로 받는다. 없으면 유형 기본");
1171
+ /** 주문상품의 주문 시점 픽업 장소 — 장소를 고치거나 지워도 이 주문의 안내는 바뀌지 않는다 */
1172
+ const pickupLocationSnapshotSchema = z.object({
1173
+ locationId: z.string(),
1174
+ name: z.string(),
1175
+ address: z.string(),
1176
+ phone: z.string().nullable(),
1177
+ hours: z.string().nullable()
1178
+ });
1179
+ const snapshotPickupSchema = pickupLocationSnapshotSchema.optional().describe("방문 수령(`PICKUP`)에서 고른 장소(주문 시점 값). 픽업 장소를 두지 않은 상점이거나 다른 방식이면 생략");
1089
1180
  /**
1090
1181
  * 주문상품의 주문 시점 이행 — 결제 확정이 주문서 줄에서 굳힌다. 상품의 현재 값이 아니다. 서버는 주문상품 컬럼
1091
1182
  * (`fulfillment_type`·`delivery_bundle_key`)과 jsonb(`fulfillment_snapshot`)를 합쳐 이 모양을 만든다.
@@ -1095,9 +1186,35 @@ const orderItemFulfillmentSnapshotSchema = z.discriminatedUnion("type", [z.objec
1095
1186
  shipping: z.object({
1096
1187
  bundleKey: z.string().nullable().describe("배송 묶음 키. 같은 키의 주문상품이 배송비를 한 번 낸 한 묶음이다. #29 이전 주문은 null"),
1097
1188
  returnAddressId: z.string().nullable().describe("주문 시점 반품지 주소 id. null이거나 지워진 주소면 상점 기본 반품지로 안내한다")
1098
- })
1099
- }), z.object({ type: z.literal("MANUAL") })]);
1189
+ }),
1190
+ method: snapshotMethodSchema,
1191
+ pickupLocation: snapshotPickupSchema
1192
+ }), z.object({
1193
+ type: z.literal("MANUAL"),
1194
+ method: snapshotMethodSchema,
1195
+ pickupLocation: snapshotPickupSchema
1196
+ })]);
1100
1197
  const orderItemFulfillmentSnapshotResponseSchema = openFulfillmentUnion(orderItemFulfillmentSnapshotSchema).describe("주문 시점 이행 스냅샷. 상품을 나중에 고쳐도 바뀌지 않는다. 제공 기록은 `fulfillment`에 있다. 값이 추가될 수 있어 SDK는 모르는 유형을 `OTHER`로 읽는다");
1198
+ /** 상점당 픽업 장소 상한 */
1199
+ const MAX_PICKUP_LOCATIONS = 20;
1200
+ /** 방문 수령(`PICKUP`) 장소 — 상점 설정이다. 구매자가 주문서에서 고르고 주문상품에 주문 시점 값이 남는다 */
1201
+ const pickupLocationSchema = z.object({
1202
+ locationId: z.string(),
1203
+ name: z.string().describe("장소 이름(예: 본점)"),
1204
+ address: z.string().describe("주소"),
1205
+ phone: z.string().nullable().describe("연락처. 없으면 null"),
1206
+ hours: z.string().nullable().describe("수령 가능 시간 안내. 없으면 null"),
1207
+ usable: z.boolean().describe("사용 여부. false면 구매자에게 보이지 않고 주문서에서 고를 수 없다"),
1208
+ sortOrder: z.number().int(),
1209
+ createdAt: z.string()
1210
+ });
1211
+ const pickupLocationRequestSchema = z.strictObject({
1212
+ name: z.string().trim().min(1).max(50),
1213
+ address: z.string().trim().min(1).max(200),
1214
+ phone: z.string().trim().max(30).nullish(),
1215
+ hours: z.string().trim().max(100).nullish(),
1216
+ usable: z.boolean().default(true)
1217
+ });
1101
1218
  //#endregion
1102
1219
  //#region src/schemas/points.ts
1103
1220
  /**
@@ -1476,14 +1593,82 @@ function proratedRefundBase(totalPrice, quantity, settledQuantity, cancelQuantit
1476
1593
  return Math.max(0, after - before);
1477
1594
  }
1478
1595
  //#endregion
1596
+ //#region src/schemas/stay.ts
1597
+ /**
1598
+ * 날짜별 재고·가격(이슈 #118) — 숙박·회차처럼 날짜마다 재고와 가격이 다른 상품. 상품 `inventoryMode: "DATED"`이면 조합(객실) × 날짜
1599
+ * 달력이 재고·가격의 원천이고, 주문서 줄은 기간(`stay`)을 받는다. 날짜는 한국 날짜 `YYYY-MM-DD`다.
1600
+ */
1601
+ /** 한국 날짜 */
1602
+ const calendarDateSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/).refine((value) => {
1603
+ const date = /* @__PURE__ */ new Date(`${value}T00:00:00Z`);
1604
+ return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === value;
1605
+ }, "날짜 형식이 아닙니다").describe("한국 날짜(YYYY-MM-DD)");
1606
+ /** 한 번에 받는 최대 박수 */
1607
+ const MAX_STAY_NIGHTS = 30;
1608
+ /** 달력 한 번 조회·설정 최대 일수 */
1609
+ const MAX_CALENDAR_DAYS = 400;
1610
+ const inventoryModeSchema = z.enum(["STANDARD", "DATED"]).describe("재고 방식. `STANDARD` 조합 재고 수량 · `DATED` 날짜별 재고·가격(숙박·회차)");
1611
+ /** 숙박 기간 — 체크인 날부터 체크아웃 전날까지가 박이다 */
1612
+ const stayRangeSchema = z.object({
1613
+ checkIn: calendarDateSchema,
1614
+ checkOut: calendarDateSchema
1615
+ }).describe("숙박 기간. 체크인 날부터 체크아웃 전날까지 박마다 재고·가격을 본다");
1616
+ /** 주문 시점 숙박 — 박마다 그때 가격 */
1617
+ const staySnapshotSchema = z.object({
1618
+ checkIn: z.string(),
1619
+ checkOut: z.string(),
1620
+ nights: z.array(z.object({
1621
+ date: z.string(),
1622
+ price: z.number().int()
1623
+ })).describe("박마다 날짜·가격(객실 1개 기준)")
1624
+ });
1625
+ /** 체크인~체크아웃 전날 날짜 목록. 형식이 틀리거나 체크아웃이 체크인 이하면 빈 목록 */
1626
+ function nightsOf(range) {
1627
+ const start = Date.parse(`${range.checkIn}T00:00:00Z`);
1628
+ const end = Date.parse(`${range.checkOut}T00:00:00Z`);
1629
+ if (Number.isNaN(start) || Number.isNaN(end) || end <= start) return [];
1630
+ const nights = [];
1631
+ for (let at = start; at < end; at += 864e5) nights.push(new Date(at).toISOString().slice(0, 10));
1632
+ return nights;
1633
+ }
1634
+ /** 관리 달력 한 칸 */
1635
+ const calendarDaySchema = z.object({
1636
+ variantId: z.string(),
1637
+ date: z.string(),
1638
+ stock: z.number().int().describe("그날 남은 재고"),
1639
+ price: z.number().int().nullable().describe("그날 가격(원). null이면 조합 가격")
1640
+ });
1641
+ const calendarQuerySchema = z.object({
1642
+ variantId: z.string().optional().describe("조합. 생략하면 모든 조합"),
1643
+ from: calendarDateSchema,
1644
+ to: calendarDateSchema.describe("끝 날짜(포함)")
1645
+ });
1646
+ /**
1647
+ * 달력 설정 — 기간의 날짜마다 재고·가격을 덮어쓴다(없는 날은 만든다). `stock`·`price`는 준 것만 바꾸고, `price: null`은 조합 가격으로
1648
+ * 되돌린다. `daysOfWeek`(0=일~6=토)를 주면 그 요일만 바꾼다
1649
+ */
1650
+ const setCalendarRequestSchema = z.object({
1651
+ variantIds: z.array(z.string()).min(1).max(50),
1652
+ from: calendarDateSchema,
1653
+ to: calendarDateSchema,
1654
+ stock: z.number().int().min(0).max(1e5).optional(),
1655
+ price: z.number().int().min(0).multipleOf(10).nullable().optional(),
1656
+ daysOfWeek: z.array(z.number().int().min(0).max(6)).min(1).max(7).optional()
1657
+ }).refine((value) => value.stock !== void 0 || value.price !== void 0, { message: "stock이나 price 중 하나는 있어야 합니다" });
1658
+ //#endregion
1479
1659
  //#region src/schemas/upload.ts
1480
1660
  /**
1481
1661
  * 업로드 용도. 허용 확장자와 크기 상한이 용도별로 다르다.
1482
1662
  *
1483
1663
  * - `product-image`: 상품 목록·상세의 상품 이미지. 목록 썸네일로 쓰이므로 정지 이미지만 받는다.
1484
1664
  * - `description`: 상세설명 본문에 삽입하는 미디어. 동영상과 svg도 받는다.
1665
+ * - `flow-attachment`: 주문 흐름 행동의 첨부(시안 등, 이슈 #115). 구매자에게 보이므로 정지 이미지와 PDF만 받는다.
1485
1666
  */
1486
- const uploadPurposeSchema = z.enum(["product-image", "description"]);
1667
+ const uploadPurposeSchema = z.enum([
1668
+ "product-image",
1669
+ "description",
1670
+ "flow-attachment"
1671
+ ]);
1487
1672
  const MB = 1048576;
1488
1673
  /**
1489
1674
  * 용도별 업로드 제한 — 서버(`POST /v1/uploads`)와 클라이언트가 공유하는 단일 원천이다.
@@ -1517,6 +1702,18 @@ const UPLOAD_PURPOSE_LIMITS = {
1517
1702
  "mov"
1518
1703
  ],
1519
1704
  maxBytes: 50 * MB
1705
+ },
1706
+ "flow-attachment": {
1707
+ extensions: [
1708
+ "jpg",
1709
+ "jpeg",
1710
+ "png",
1711
+ "webp",
1712
+ "avif",
1713
+ "gif",
1714
+ "pdf"
1715
+ ],
1716
+ maxBytes: 20 * MB
1520
1717
  }
1521
1718
  };
1522
1719
  /** 파일명의 소문자 확장자. 확장자가 없으면 `""` */
@@ -1618,6 +1815,7 @@ const productVariantSchema = z.object({
1618
1815
  weightGram: z.number().int().nullable(),
1619
1816
  sellerCode: z.string().nullable(),
1620
1817
  usable: z.boolean(),
1818
+ attributes: z.record(z.string(), z.string()).optional().describe("조합 속성(이슈 #115) — 키 → 값 문자열(예: 회차 일시 `showAt`). 플로우가 `item.option.<키>`로 읽고 타입(날짜·숫자 등)은 플로우가 선언한다. 없으면 생략"),
1621
1819
  hasOrders: z.boolean().optional().describe("주문에 담긴 적이 있는 조합인가(이슈 #59). true인 조합은 옵션 교체에서 뺄 수 없고(409 `OPTION_HAS_ORDERS`) `usable: false`로 판매를 끈다. 서버는 항상 싣는다. 요청에는 쓰지 않는다")
1622
1820
  });
1623
1821
  /** 옵션 축(그룹) 최대 개수 — 스키마 상한의 단일 원천 */
@@ -1660,6 +1858,21 @@ const addonGroupSchema = z.object({
1660
1858
  required: z.boolean().describe("구매자가 꼭 골라야 하는가. false면 고르지 않아도 된다"),
1661
1859
  values: z.array(addonValueSchema)
1662
1860
  });
1861
+ /**
1862
+ * 직접 입력 타입(이슈 #115 결정 24) — 값은 늘 문자열로 오가고 서버가 타입대로 검사·정규화한다.
1863
+ * `number`는 정수, `select`는 `options` 중 하나, `date`는 `YYYY-MM-DD`, `datetime`은 오프셋 있는 ISO 8601이다.
1864
+ * `image`는 구매자 업로드(`POST /storefront/v1/uploads/order-inputs`) 주소 목록이고 `maxLength`가 최대 장수(1~5)다
1865
+ */
1866
+ const CUSTOM_INPUT_TYPES = [
1867
+ "text",
1868
+ "number",
1869
+ "select",
1870
+ "date",
1871
+ "datetime",
1872
+ "image"
1873
+ ];
1874
+ /** 직접 입력 키 — 플로우 식이 `item.inputs.<key>`로 읽는다. 영문 소문자로 시작하는 영숫자·밑줄 */
1875
+ const customInputKeySchema = z.string().regex(/^[a-z][a-zA-Z0-9_]{0,39}$/).describe("고정 키(영문 소문자로 시작, 영숫자·밑줄 40자). 플로우 식이 `item.inputs.<key>`로 읽는다");
1663
1876
  /** 직접 입력 항목 — 예: 각인 문구 */
1664
1877
  const customInputSchema = z.object({
1665
1878
  inputId: z.string(),
@@ -1668,7 +1881,10 @@ const customInputSchema = z.object({
1668
1881
  maxLength: z.number().int().describe("최대 글자 수"),
1669
1882
  required: z.boolean(),
1670
1883
  usable: z.boolean().describe("사용 여부. false면 구매자에게 보이지 않는다"),
1671
- sortOrder: z.number().int()
1884
+ sortOrder: z.number().int(),
1885
+ key: z.string().nullable().optional().describe("고정 키. 없으면 null(플로우 식이 읽지 않는다)"),
1886
+ type: z.string().optional().describe("입력 타입. 현재 값은 `text`·`number`·`select`·`date`·`datetime`이고 값이 추가될 수 있어 문자열로 받는다. 없으면 `text`"),
1887
+ options: z.array(z.string()).nullable().optional().describe("`select`의 선택지. 그 밖의 타입은 null")
1672
1888
  });
1673
1889
  /**
1674
1890
  * 직접 입력 항목명에 쓸 수 없는 개인정보성 단어 — 상점 플랫폼 검사와 서버 400(`CUSTOM_INPUT_LABEL_FORBIDDEN`)이 이 목록 하나를 쓴다.
@@ -1731,7 +1947,11 @@ const customInputRequestSchema = z.object({
1731
1947
  placeholder: z.string().trim().max(100).nullish(),
1732
1948
  maxLength: z.number().int().min(1).max(200),
1733
1949
  required: z.boolean().default(false),
1734
- usable: z.boolean().default(true)
1950
+ usable: z.boolean().default(true),
1951
+ /** 아래 셋은 생략하면 지금 값을 유지한다(새 항목은 키 없음·`text`) — 옛 클라이언트의 저장이 타입을 지우지 않는다 */
1952
+ key: customInputKeySchema.nullish(),
1953
+ type: z.enum(CUSTOM_INPUT_TYPES).optional().describe("입력 타입. 생략하면 지금 값 유지(새 항목은 `text`)"),
1954
+ options: z.array(z.string().trim().min(1).max(50)).min(1).max(30).nullish().describe("`select`의 선택지(1~30개). `select`가 아니면 생략하거나 null")
1735
1955
  });
1736
1956
  /**
1737
1957
  * 주문상품·장바구니·주문서 줄의 옵션 선택 스냅샷 한 칸 — 주문 시점 이름이다(상품을 고쳐도 바뀌지 않는다).
@@ -1746,7 +1966,9 @@ const optionSelectionSchema = z.object({
1746
1966
  /** 구매자가 적은 직접 입력값 — 주문 시점 항목명과 값 */
1747
1967
  const customInputValueSchema = z.object({
1748
1968
  label: z.string(),
1749
- value: z.string()
1969
+ value: z.string(),
1970
+ key: z.string().nullable().optional().describe("항목의 고정 키(주문 시점). 없으면 null"),
1971
+ type: z.string().optional().describe("항목의 입력 타입(주문 시점). 없으면 `text`")
1750
1972
  });
1751
1973
  const discountSchema = z.object({
1752
1974
  productId: z.string(),
@@ -1777,6 +1999,7 @@ const productSchema = productSummarySchema.extend({
1777
1999
  customInputs: z.array(customInputSchema).optional().default([]).describe("직접 입력 항목(이슈 #59). 사용하지 않는 항목도 싣는다. 없으면 빈 배열. 서버는 항상 싣는다"),
1778
2000
  optionSort: optionSortSchema.optional().default("REGISTERED").describe("옵션 값 정렬 순서(이슈 #59). 서버는 항상 싣는다"),
1779
2001
  fulfillment: productFulfillmentResponseSchema,
2002
+ inventoryMode: z.string().optional().describe("재고 방식(이슈 #118). 날짜별 재고 상품만 `DATED`를 싣는다. 없으면 `STANDARD`"),
1780
2003
  fulfillmentTypeLocked: z.boolean().describe("판매 이력(주문상품)이 있어 상품 유형(`fulfillment.type`)을 바꿀 수 없는가. true면 다른 유형으로 수정하는 요청이 409 `FULFILLMENT_TYPE_LOCKED`다. 같은 유형 안의 속성은 바꿀 수 있다"),
1781
2004
  refundPolicy: productRefundPolicyPatchSchema.nullable().describe("상품별 환불 정책 덮어쓰기(상품이 정한 항목만). null이면 상점 기본 환불 정책을 쓴다. 반품·교환 배송비(`returnDeliveryFee`·`exchangeDeliveryFee`)는 배송 상품에만 있다"),
1782
2005
  /**
@@ -1868,7 +2091,8 @@ const productVariantRequestSchema = z.object({
1868
2091
  costPrice: z.number().int().min(0).optional(),
1869
2092
  weightGram: z.number().int().min(0).optional(),
1870
2093
  sellerCode: codeSchema.optional(),
1871
- usable: z.boolean().default(true)
2094
+ usable: z.boolean().default(true),
2095
+ 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
2096
  });
1873
2097
  /** 축 × 값 → variant 전체 교체 요청 (PUT /products/{productId}/options) */
1874
2098
  const optionModelRequestSchema = z.object({
@@ -1931,7 +2155,8 @@ const productWriteShape = {
1931
2155
  })).optional(),
1932
2156
  refundPolicy: productRefundPolicyPatchSchema.nullish().describe("상품별 환불 정책 — 준 항목만 상점 기본을 덮어쓴다. `null`이나 생략은 상점 기본을 그대로 쓴다는 뜻이다. 반품·교환 배송비(`returnDeliveryFee`·`exchangeDeliveryFee`)는 배송 상품에만 줄 수 있다(다른 유형은 400)"),
1933
2157
  ...optionModelRequestSchema.shape,
1934
- sourceOptionSetIds: z.array(z.string()).max(10).optional().describe("쓰기 전용(이슈 #59) — 이 저장으로 옵션을 불러온 저장 옵션 id. 상품 저장과 같은 트랜잭션에서 불러오기 기록을 남겨 저장 옵션의 `importedProductCount`를 센다. 없는 id는 무시한다")
2158
+ sourceOptionSetIds: z.array(z.string()).max(10).optional().describe("쓰기 전용(이슈 #59) — 이 저장으로 옵션을 불러온 저장 옵션 id. 상품 저장과 같은 트랜잭션에서 불러오기 기록을 남겨 저장 옵션의 `importedProductCount`를 센다. 없는 id는 무시한다"),
2159
+ inventoryMode: inventoryModeSchema.optional().describe("재고 방식(이슈 #118). `DATED`면 날짜별 달력(`PUT /products/{id}/calendar`)이 재고·가격이고 주문서 줄은 숙박 기간(`stay`)을 받는다. 생략하면 등록은 `STANDARD`, 수정은 지금 값. 판매 이력이 있으면 바꿀 수 없다(409 `INVENTORY_MODE_LOCKED`)")
1935
2160
  };
1936
2161
  const productCreateRequestSchema = z.strictObject({
1937
2162
  ...productWriteShape,
@@ -2354,6 +2579,195 @@ const collectionPreviewSchema = z.object({
2354
2579
  salesComputedAt: z.string().nullable().default(null).describe("판매량 기준 시각. 판매량 상위 조건이나 판매량순 정렬을 쓰면 이 시각까지의 주문을 센다. 판매량을 쓰지 않거나 집계 전이면 null")
2355
2580
  });
2356
2581
  //#endregion
2582
+ //#region src/schemas/commerce-flow.ts
2583
+ /**
2584
+ * 커머스 플로우(이슈 #115) — 주문상품이 따르는 플로우의 지금 상태와 할 수 있는 행동. 공개 계약은 필드 추가로만 자란다.
2585
+ * 행동 키·필드 키·꺼진 이유는 상점·앱이 늘리는 **열린 문자열**이다(모르는 값도 파싱한다). 공개 상태(`coreStatus`)만 닫힌 8개 값이다.
2586
+ * 화면은 이 값만 그리고 상태 이름으로 분기하지 않는다 — 판정은 서버가 한다.
2587
+ */
2588
+ const flowInputFieldSchema = z.object({
2589
+ key: z.string(),
2590
+ type: z.string().describe("text · number · select · date · datetime · image (늘어날 수 있다)"),
2591
+ required: z.boolean(),
2592
+ label: z.string(),
2593
+ maxLength: z.number().int().optional(),
2594
+ maxFiles: z.number().int().optional(),
2595
+ options: z.array(z.union([z.string(), z.number()])).optional()
2596
+ });
2597
+ const flowActionSchema = z.object({
2598
+ key: z.string().describe("행동 키. 플랫폼 키(예: CONFIRM_ORDER)와 상점·앱이 정한 키가 섞인다"),
2599
+ label: z.string().describe("보여 줄 이름"),
2600
+ mode: z.enum([
2601
+ "INSTANT",
2602
+ "REQUEST",
2603
+ "VIEW"
2604
+ ]).describe("INSTANT 바로 실행 · REQUEST 승인 요청(클레임) · VIEW 보기"),
2605
+ enabled: z.boolean(),
2606
+ disabled: z.object({
2607
+ reason: z.string().describe("EXPIRED · CONDITION (늘어날 수 있다)"),
2608
+ message: z.string().optional()
2609
+ }).optional().describe("꺼진 이유. 켜져 있으면 없다"),
2610
+ availableUntil: z.string().optional().describe("이 시각까지만 할 수 있다(ISO 8601)"),
2611
+ subflow: z.string().optional().describe("이 행동이 시작하는 하위 플로우(클레임)"),
2612
+ input: z.array(flowInputFieldSchema).optional().describe("받는 입력 폼"),
2613
+ partialQuantity: z.union([z.boolean(), z.literal("UNIT")]).optional()
2614
+ });
2615
+ /** 커스텀 필드 값 — 문자열(날짜·일시는 ISO 8601)·숫자·참거짓·null, 수량 단위 필드는 문자열 배열 */
2616
+ const flowFieldValueSchema = z.union([
2617
+ z.string(),
2618
+ z.number(),
2619
+ z.boolean(),
2620
+ z.null(),
2621
+ z.array(z.string())
2622
+ ]);
2623
+ const flowStateSchema = z.object({
2624
+ key: z.string().describe("플로우 안 상태 키(상점이 정한다). 화면 분기에 쓰지 않는다"),
2625
+ label: z.string().describe("보는 사람(셀러·구매자)의 상태 이름"),
2626
+ coreStatus: orderItemStatusSchema.optional().describe("공개 상태(8개)"),
2627
+ claimStatus: claimStatusSchema.optional(),
2628
+ message: z.string().optional().describe("보는 사람에게 보여 줄 안내문"),
2629
+ enteredAt: z.string().describe("이 상태에 들어온 시각(ISO 8601)"),
2630
+ deadlineAt: z.string().optional().describe("가장 가까운 기한(ISO 8601)"),
2631
+ attachments: z.array(z.string()).optional().describe("가장 최근 행동이 붙인 첨부 주소(시안 등, #115). 없으면 생략"),
2632
+ progress: z.boolean().optional().describe("진행 단계 표시에 넣는 상태인가"),
2633
+ fields: z.record(z.string(), flowFieldValueSchema).describe("보는 사람 공개 범위의 커스텀 필드")
2634
+ });
2635
+ const orderItemFlowSchema = z.object({
2636
+ orderItemId: z.string(),
2637
+ flow: z.object({
2638
+ flowId: z.string(),
2639
+ version: z.number().int()
2640
+ }),
2641
+ flowState: flowStateSchema,
2642
+ actions: z.array(flowActionSchema),
2643
+ timers: z.array(z.object({
2644
+ key: z.string(),
2645
+ dueAt: z.string(),
2646
+ paused: z.boolean()
2647
+ })).describe("걸린 타이머(셀러 보기)"),
2648
+ ended: z.boolean()
2649
+ });
2650
+ const flowActionRequestSchema = z.object({ input: z.record(z.string(), z.unknown()).optional().describe("행동 입력 — 행동의 `input` 폼 키") });
2651
+ /**
2652
+ * 행동 실행 결과. 지금은 동기 완료(COMPLETED)뿐이다. 외부 호출이 든 전이는 202와 함께 ACCEPTED(runId)가 온다(HTTP·앱 노드 단계에서 더한다).
2653
+ * 동기 거절은 409(ACTION_NOT_AVAILABLE)다.
2654
+ */
2655
+ const flowActionResultSchema = z.object({
2656
+ status: z.literal("COMPLETED"),
2657
+ flowState: flowStateSchema,
2658
+ actions: z.array(flowActionSchema),
2659
+ /** 이 행동으로 바뀐 주문상품(주문 묶음 진행이면 여럿) */
2660
+ affectedOrderItemIds: z.array(z.string())
2661
+ });
2662
+ /** 플로우 작성 그래프와 정의는 형태가 크고 노드 종류가 늘어나므로 여기서는 열린 객체로 싣는다(검증은 서버 `…/draft/check`) */
2663
+ const flowDocumentSchema = z.record(z.string(), z.unknown());
2664
+ const flowPresetSummarySchema = z.object({
2665
+ key: z.string(),
2666
+ presetVersion: z.number().int(),
2667
+ name: z.string(),
2668
+ description: z.string(),
2669
+ availability: z.enum(["AVAILABLE", "BLOCKED"]).describe("BLOCKED면 의존 이슈(dependsOn)가 끝나야 설치할 수 있다"),
2670
+ dependsOn: z.array(z.string()),
2671
+ requires: flowDocumentSchema.describe("프리셋이 쓰는 Core 기능(진행 단위·이행 방식·주문 입력 등)"),
2672
+ variables: z.array(flowDocumentSchema).describe("셀러가 값만 입력하는 변수 정의")
2673
+ });
2674
+ const commerceFlowSummarySchema = z.object({
2675
+ flowId: z.string(),
2676
+ key: z.string().describe("상점 안 유일한 키"),
2677
+ name: z.string(),
2678
+ progression: z.enum(["ITEM", "ORDER_GROUP"]),
2679
+ fulfillmentMethods: z.array(z.string()),
2680
+ presetKey: z.string().nullable().describe("설치한 프리셋(설치 뒤 연결되지 않는다)"),
2681
+ presetVersion: z.number().int().nullable(),
2682
+ activeVersion: z.number().int().nullable().describe("게시된 버전. 새 주문이 따른다"),
2683
+ archivedAt: z.string().nullable(),
2684
+ createdAt: z.string(),
2685
+ updatedAt: z.string()
2686
+ });
2687
+ const commerceFlowVersionViewSchema = z.object({
2688
+ version: z.number().int(),
2689
+ status: z.enum([
2690
+ "DRAFT",
2691
+ "ACTIVE",
2692
+ "LEGACY"
2693
+ ]),
2694
+ revision: z.number().int().describe("초안 저장의 If-Match 값"),
2695
+ graph: flowDocumentSchema,
2696
+ definition: flowDocumentSchema,
2697
+ variables: z.record(z.string(), z.unknown()),
2698
+ publishedAt: z.string().nullable()
2699
+ });
2700
+ const commerceFlowSchema = commerceFlowSummarySchema.extend({
2701
+ draft: commerceFlowVersionViewSchema.nullable(),
2702
+ active: commerceFlowVersionViewSchema.nullable(),
2703
+ versions: z.array(z.object({
2704
+ version: z.number().int(),
2705
+ status: z.enum([
2706
+ "DRAFT",
2707
+ "ACTIVE",
2708
+ "LEGACY"
2709
+ ]),
2710
+ publishedAt: z.string().nullable()
2711
+ }))
2712
+ });
2713
+ const createCommerceFlowRequestSchema = z.object({
2714
+ key: z.string().regex(/^[a-z][a-z0-9-]{1,48}$/).describe("상점 안 유일한 키(소문자·숫자·하이픈)"),
2715
+ name: z.string().min(1).max(60).optional(),
2716
+ presetKey: z.string().optional().describe("설치할 프리셋. 없으면 빈 플로우"),
2717
+ variables: z.record(z.string(), z.unknown()).optional().describe("프리셋 변수 값")
2718
+ });
2719
+ const saveFlowDraftRequestSchema = z.object({
2720
+ graph: flowDocumentSchema,
2721
+ definition: flowDocumentSchema.optional(),
2722
+ variables: z.record(z.string(), z.unknown()).optional()
2723
+ });
2724
+ const flowIssueSchema = z.object({
2725
+ code: z.string(),
2726
+ message: z.string(),
2727
+ nodeId: z.string().optional(),
2728
+ edgeId: z.string().optional()
2729
+ });
2730
+ const commerceFlowCheckSchema = z.object({
2731
+ publishable: z.boolean().describe("게시를 막는 오류(실행 불가·공개 계약·한도)가 없다"),
2732
+ blocking: z.array(flowIssueSchema),
2733
+ warnings: z.array(flowIssueSchema).describe("업무 논리 경고 — 게시를 막지 않는다")
2734
+ });
2735
+ const flowAssignmentRuleSchema = z.object({
2736
+ ruleId: z.string(),
2737
+ priority: z.number().int().describe("작을수록 먼저 본다"),
2738
+ condition: z.string().describe("CEL 조건식. 읽는 값: product(id·category·categoryPath·tags), order(amount·paymentMethod), buyer(member). 예: `\"cat_1\" in product.categoryPath`"),
2739
+ flowId: z.string()
2740
+ });
2741
+ const saveFlowAssignmentRulesRequestSchema = z.object({ rules: z.array(z.object({
2742
+ condition: z.string().min(1).max(500),
2743
+ flowId: z.string()
2744
+ })).max(50).describe("위에서부터 처음 맞는 규칙의 게시된 플로우를 쓴다. 목록 전체를 바꾼다") });
2745
+ const resolvedFlowSchema = z.object({
2746
+ flowId: z.string(),
2747
+ version: z.number().int(),
2748
+ source: z.enum(["RULE", "PLATFORM"]).describe("RULE 할당 규칙 · PLATFORM 맞는 규칙이 없어 플랫폼 기본 플로우"),
2749
+ ruleId: z.string().optional()
2750
+ });
2751
+ const testFlowAssignmentRequestSchema = z.object({
2752
+ productId: z.string(),
2753
+ orderAmount: z.number().int().nonnegative().optional(),
2754
+ paymentMethod: z.string().optional(),
2755
+ member: z.boolean().optional()
2756
+ });
2757
+ /** 시크릿 이름 — 플로우 변수 `secretRef`의 값이다 */
2758
+ const flowSecretNameSchema = z.string().regex(/^[a-z][a-z0-9-]{1,39}$/).describe("시크릿 이름(소문자·숫자·하이픈 2~40자). 플로우 변수(시크릿)의 값으로 쓴다");
2759
+ /** HTTP 노드가 부를 셀러 API — 헤더 값은 응답에 싣지 않는다 */
2760
+ const flowSecretSchema = z.object({
2761
+ name: z.string(),
2762
+ url: z.string().describe("요청 주소(https)"),
2763
+ headerNames: z.array(z.string()).describe("저장한 헤더 이름(값은 보이지 않는다)"),
2764
+ updatedAt: z.string()
2765
+ });
2766
+ const saveFlowSecretRequestSchema = z.object({
2767
+ url: z.url().refine((value) => value.startsWith("https://"), { message: "https 주소만 받습니다" }).describe("요청 주소. https만, 사설·루프백 주소는 400 `FLOW_SECRET_URL_INVALID`"),
2768
+ 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("함께 보낼 헤더(인증 등). 값은 암호화해 두고 다시 보여 주지 않는다")
2769
+ });
2770
+ //#endregion
2357
2771
  //#region src/schemas/promotion.ts
2358
2772
  /**
2359
2773
  * 쿠폰 금액 계산 (이슈 #47) — 쿠폰 할인을 **얼마나, 어느 주문상품에** 주는지를 정한다.
@@ -3529,7 +3943,8 @@ const eventTypeSchema = z.enum([
3529
3943
  "CLAIM.COMPLETED",
3530
3944
  "INQUIRY.CREATED",
3531
3945
  "REVIEW.CREATED",
3532
- "PRODUCT.OUT_OF_STOCK"
3946
+ "PRODUCT.OUT_OF_STOCK",
3947
+ "ORDER.FLOW_NOTIFICATION"
3533
3948
  ]).describe("웹훅 이벤트 타입. `ORDER.ADDRESS_CHANGE_REQUESTED`는 현재 발송하지 않음(호환을 위해 값만 남았고, 구독해도 이벤트가 오지 않는다)");
3534
3949
  const webhookStatusSchema = z.enum(["ACTIVE", "SUSPENDED"]).describe("구독 상태. `ACTIVE`=발송 대상, `SUSPENDED`=24시간 이상 연속 전송 실패로 발송이 정지된 상태. 정지 중 발생한 이벤트는 적재하지 않는다. 재개(`POST /webhooks/{id}/resume`)하거나 구독을 수정하면 ACTIVE로 돌아간다");
3535
3950
  const webhookSchema = z.object({
@@ -4107,6 +4522,7 @@ const orderItemSchema = z.object({
4107
4522
  optionName: z.string().nullable(),
4108
4523
  optionSelections: z.array(optionSelectionSchema).optional().default([]).describe("주문 시점 옵션 선택(이슈 #59) — 조합 옵션(옵션명마다 한 칸, 추가금 0)과 추가 선택(값의 추가금). 옵션이 없거나 이 필드 이전 주문은 빈 배열. 서버는 항상 싣는다"),
4109
4524
  customInputs: z.array(customInputValueSchema).optional().default([]).describe("구매자가 적은 직접 입력값(주문 시점 항목명과 값, 이슈 #59). 없으면 빈 배열. 서버는 항상 싣는다"),
4525
+ stay: staySnapshotSchema.optional().describe("숙박 기간과 박별 가격(날짜별 재고 상품만, 이슈 #118). 없으면 생략"),
4110
4526
  sellerCode: z.string().nullable(),
4111
4527
  fulfillmentSnapshot: orderItemFulfillmentSnapshotResponseSchema.describe("주문 시점 이행 스냅샷(이슈 #57). `type`이 주문 시점 상품 유형이다. 배송 상품이 아니면 발송·배송완료 대신 제공 처리를 하고, `DELIVERED`는 제공 완료다. 상품을 나중에 고쳐도 바뀌지 않는다. 제공 기록은 `fulfillment`에 있다"),
4112
4528
  quantity: z.number().int().describe("주문 수량"),
@@ -4365,7 +4781,10 @@ const savedCustomInputSchema = z.object({
4365
4781
  label: z.string(),
4366
4782
  placeholder: z.string().nullable(),
4367
4783
  maxLength: z.number().int(),
4368
- required: z.boolean()
4784
+ required: z.boolean(),
4785
+ key: z.string().nullable().optional().describe("고정 키(#115). 없으면 생략"),
4786
+ type: z.string().optional().describe("입력 타입(#115). 없으면 `text`"),
4787
+ options: z.array(z.string()).nullable().optional().describe("`select`의 선택지")
4369
4788
  });
4370
4789
  const savedOptionSetSchema = z.object({
4371
4790
  optionSetId: z.string(),
@@ -4391,7 +4810,11 @@ const savedCustomInputRequestSchema = z.object({
4391
4810
  label: z.string().trim().min(1).max(30),
4392
4811
  placeholder: z.string().trim().max(100).nullish(),
4393
4812
  maxLength: z.number().int().min(1).max(200),
4394
- required: z.boolean().default(false)
4813
+ required: z.boolean().default(false),
4814
+ /** 타입 있는 주문 입력(#115) — 상품 직접 입력과 같은 규칙. 생략하면 키 없음·`text` */
4815
+ key: customInputRequestSchema.shape.key,
4816
+ type: customInputRequestSchema.shape.type,
4817
+ options: customInputRequestSchema.shape.options
4395
4818
  });
4396
4819
  /**
4397
4820
  * 저장 옵션 만들기·수정 본문. 조합 옵션명은 최대 `MAX_OPTION_GROUPS`개, 추가 선택은 최대 `MAX_ADDON_GROUPS`개이고
@@ -4840,7 +5263,7 @@ function quoteDelivery(input) {
4840
5263
  for (const line of input.lines) {
4841
5264
  const product = input.productOf(line.productId);
4842
5265
  if (!product) continue;
4843
- if (!requiresShipping(line.fulfillmentType ?? product.fulfillmentType)) continue;
5266
+ if (!requiresShipping(line.fulfillmentType ?? product.fulfillmentType, line.fulfillmentMethod)) continue;
4844
5267
  shippableAmount += line.amount;
4845
5268
  const key = deliveryBundleKeyOf(product);
4846
5269
  const group = groups.get(key) ?? {
@@ -6346,7 +6769,11 @@ function createStoreClient(options) {
6346
6769
  updateVariantStock: (productId, variantId, body) => storeHttp.request("PATCH", path`/products/${productId}/variants/${variantId}/stock`, variantStockSchema, { body: variantStockRequestSchema.parse(body) }),
6347
6770
  getDiscount: (productId) => storeHttp.request("GET", path`/products/${productId}/discount`, discountSchema),
6348
6771
  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`)
6772
+ removeDiscount: (productId) => storeHttp.requestVoid("DELETE", path`/products/${productId}/discount`),
6773
+ /** 날짜별 재고 상품(`inventoryMode: "DATED"`, 이슈 #118)의 기간(포함) 달력. 없는 날은 싣지 않는다 */
6774
+ getCalendar: (productId, query) => storeHttp.request("GET", path`/products/${productId}/calendar`, z.array(calendarDaySchema), { query: calendarQuerySchema.parse(query) }),
6775
+ /** 기간의 날짜마다 조합별 재고·가격을 덮어쓴다. `price: null`은 조합 가격으로 되돌린다 */
6776
+ setCalendar: (productId, body) => storeHttp.request("PUT", path`/products/${productId}/calendar`, z.object({ updated: z.number().int() }), { body: setCalendarRequestSchema.parse(body) })
6350
6777
  },
6351
6778
  /**
6352
6779
  * 저장 옵션 (이슈 #59) — 자주 쓰는 옵션 구성. 불러오기는 복사라 저장 옵션을 고쳐도 불러온 상품은 바뀌지 않는다.
@@ -6465,7 +6892,55 @@ function createStoreClient(options) {
6465
6892
  }),
6466
6893
  headers: idempotency(idempotencyKey)
6467
6894
  }),
6468
- getDelivery: (orderItemId) => storeHttp.request("GET", path`/order-items/${orderItemId}/delivery`, deliveryStatusSchema)
6895
+ getDelivery: (orderItemId) => storeHttp.request("GET", path`/order-items/${orderItemId}/delivery`, deliveryStatusSchema),
6896
+ /** `GET /order-items/{id}/flow` — 커머스 플로우의 지금 상태·할 수 있는 행동·타이머(#115). 스코프 `order:r` */
6897
+ getFlow: (orderItemId) => storeHttp.request("GET", path`/order-items/${orderItemId}/flow`, orderItemFlowSchema),
6898
+ /**
6899
+ * `POST /order-items/{id}/actions/{key}` — `getFlow().actions`에 켜진 행동을 실행한다(#115). 묶음 진행이면
6900
+ * `affectedOrderItemIds`에 함께 움직인 주문상품이 온다. 에러: 409 `ACTION_NOT_AVAILABLE`
6901
+ */
6902
+ act: (orderItemId, key, input = {}, idempotencyKey) => storeHttp.request("POST", path`/order-items/${orderItemId}/actions/${key}`, flowActionResultSchema, {
6903
+ body: flowActionRequestSchema.parse({ input }),
6904
+ headers: idempotency(idempotencyKey)
6905
+ }),
6906
+ /**
6907
+ * `POST /order-items/{id}/events/{key}` — 현장 단말·연동의 상점 사건(`custom.<이름>`)을 플로우에 넣는다(#115).
6908
+ * 에러: 400 `FLOW_EVENT_KEY_INVALID`, 409 `FLOW_EVENT_NOT_ACCEPTED`
6909
+ */
6910
+ emitEvent: (orderItemId, key, input = {}, idempotencyKey) => storeHttp.request("POST", path`/order-items/${orderItemId}/events/${key}`, flowActionResultSchema, {
6911
+ body: flowActionRequestSchema.parse({ input }),
6912
+ headers: idempotency(idempotencyKey)
6913
+ })
6914
+ },
6915
+ /**
6916
+ * 커머스 플로우 (이슈 #115) — 프리셋 설치·초안 저장·검사·게시와 상품 할당 규칙. 조회 `flow:r`, 쓰기 `flow:rw`.
6917
+ * 게시한 버전은 불변이고, 진행 중 주문은 결제 때 붙은 버전으로 끝까지 간다.
6918
+ */
6919
+ commerceFlows: {
6920
+ presets: () => storeHttp.request("GET", "/flow-presets", z.array(flowPresetSummarySchema)),
6921
+ list: () => storeHttp.request("GET", "/commerce-flows", z.array(commerceFlowSummarySchema)),
6922
+ get: (flowId) => storeHttp.request("GET", path`/commerce-flows/${flowId}`, commerceFlowSchema),
6923
+ /** 프리셋 설치 또는 빈 플로우. 에러: 409 `FLOW_KEY_TAKEN`·`FLOW_PRESET_UNAVAILABLE` */
6924
+ create: (body) => storeHttp.request("POST", "/commerce-flows", commerceFlowSchema, { body: createCommerceFlowRequestSchema.parse(body) }),
6925
+ /** 초안 저장. `revision`을 주면 그 초안일 때만 저장한다(409 `FLOW_REVISION_CONFLICT`) */
6926
+ saveDraft: (flowId, body, revision) => storeHttp.request("PUT", path`/commerce-flows/${flowId}/draft`, commerceFlowSchema, {
6927
+ body: saveFlowDraftRequestSchema.parse(body),
6928
+ headers: revision === void 0 ? void 0 : { "if-match": String(revision) }
6929
+ }),
6930
+ check: (flowId) => storeHttp.request("POST", path`/commerce-flows/${flowId}/draft/check`, commerceFlowCheckSchema),
6931
+ /** 게시. 차단 오류가 있으면 409 `PUBLISH_BLOCKED`(`details.blocking`) */
6932
+ publish: (flowId) => storeHttp.request("POST", path`/commerce-flows/${flowId}/draft/publish`, commerceFlowSchema),
6933
+ rules: () => storeHttp.request("GET", "/commerce-flows/assignment-rules", z.array(flowAssignmentRuleSchema)),
6934
+ /** 할당 규칙 전체 교체(우선순위는 배열 순서). 에러: 400 `FLOW_ASSIGNMENT_CONDITION_INVALID`, 409 `FLOW_NOT_PUBLISHED` */
6935
+ saveRules: (body) => storeHttp.request("PUT", "/commerce-flows/assignment-rules", z.array(flowAssignmentRuleSchema), { body: saveFlowAssignmentRulesRequestSchema.parse(body) }),
6936
+ testRules: (body) => storeHttp.request("POST", "/commerce-flows/assignment-rules/test", resolvedFlowSchema, { body: testFlowAssignmentRequestSchema.parse(body) }),
6937
+ /** 이 상품에 지금 붙을 플로우 */
6938
+ forProduct: (productId) => storeHttp.request("GET", path`/products/${productId}/flow`, resolvedFlowSchema),
6939
+ /** HTTP 노드 시크릿 목록(헤더 값 제외) */
6940
+ secrets: () => storeHttp.request("GET", "/commerce-flows/secrets", z.array(flowSecretSchema)),
6941
+ /** 시크릿 저장(같은 이름이면 덮어쓴다). 상점 플랫폼 OWNER·ADMIN만. 에러: 400 `FLOW_SECRET_URL_INVALID` */
6942
+ saveSecret: (name, body) => storeHttp.request("PUT", path`/commerce-flows/secrets/${name}`, flowSecretSchema, { body: saveFlowSecretRequestSchema.parse(body) }),
6943
+ removeSecret: (name) => storeHttp.requestVoid("DELETE", path`/commerce-flows/secrets/${name}`)
6469
6944
  },
6470
6945
  carriers: { list: () => storeHttp.request("GET", "/carriers", z.array(carrierSchema)) },
6471
6946
  claims: {
@@ -6779,6 +7254,13 @@ list: (params) => storeHttp.request("GET", "/audit-logs", auditLogPageSchema, {
6779
7254
  remove: (addressId) => storeHttp.requestVoid("DELETE", path`/seller-addresses/${addressId}`),
6780
7255
  setDefault: (addressId) => storeHttp.requestVoid("POST", path`/seller-addresses/${addressId}/default`)
6781
7256
  },
7257
+ /** 픽업 장소 (이슈 #115) — 방문 수령 주문의 수령 장소. 조회 `store:r`, 쓰기 `store:rw`(상점 플랫폼 OWNER·ADMIN) */
7258
+ pickupLocations: {
7259
+ list: () => storeHttp.request("GET", "/pickup-locations", z.array(pickupLocationSchema)),
7260
+ create: (body) => storeHttp.request("POST", "/pickup-locations", pickupLocationSchema, { body: pickupLocationRequestSchema.parse(body) }),
7261
+ update: (locationId, body) => storeHttp.request("PUT", path`/pickup-locations/${locationId}`, pickupLocationSchema, { body: pickupLocationRequestSchema.parse(body) }),
7262
+ remove: (locationId) => storeHttp.requestVoid("DELETE", path`/pickup-locations/${locationId}`)
7263
+ },
6782
7264
  /**
6783
7265
  * 스토어프론트 호스팅 (이슈 #53) — 조회 `storefront:r`, 쓰기 `storefront:rw`(OWNER·ADMIN).
6784
7266
  * 쓰기 응답은 바뀐 사이트다. Cloudflare 반영은 커밋 뒤라 `provisioning.status`가 잠시 `PENDING`일 수 있다.
@@ -7076,7 +7558,8 @@ const STORE_SCOPE_RESOURCES = {
7076
7558
  customer: ["r", "rw"],
7077
7559
  audit: ["r"],
7078
7560
  promotion: ["r", "rw"],
7079
- storefront: ["r", "rw"]
7561
+ storefront: ["r", "rw"],
7562
+ flow: ["r", "rw"]
7080
7563
  };
7081
7564
  const storeScopeResourceSchema = z.enum(Object.keys(STORE_SCOPE_RESOURCES)).describe("스코프 리소스");
7082
7565
  /** 카탈로그상 존재하는 스코프 문자열인가 (예: `settlement:rw`는 false) */
@@ -7105,7 +7588,8 @@ const STORE_ROLE_SCOPES = {
7105
7588
  "customer:rw",
7106
7589
  "audit:r",
7107
7590
  "promotion:rw",
7108
- "storefront:rw"
7591
+ "storefront:rw",
7592
+ "flow:rw"
7109
7593
  ],
7110
7594
  ADMIN: [
7111
7595
  "product:rw",
@@ -7121,7 +7605,8 @@ const STORE_ROLE_SCOPES = {
7121
7605
  "customer:rw",
7122
7606
  "audit:r",
7123
7607
  "promotion:rw",
7124
- "storefront:rw"
7608
+ "storefront:rw",
7609
+ "flow:rw"
7125
7610
  ],
7126
7611
  STAFF: [
7127
7612
  "product:rw",
@@ -7131,7 +7616,8 @@ const STORE_ROLE_SCOPES = {
7131
7616
  "inquiry:rw",
7132
7617
  "review:rw",
7133
7618
  "customer:r",
7134
- "promotion:r"
7619
+ "promotion:r",
7620
+ "flow:r"
7135
7621
  ]
7136
7622
  };
7137
7623
  //#endregion
@@ -7308,6 +7794,23 @@ const productOutOfStockWebhookEventSchema = z.object({
7308
7794
  type: z.literal("PRODUCT.OUT_OF_STOCK"),
7309
7795
  data: productOutOfStockWebhookEventDataSchema
7310
7796
  });
7797
+ /**
7798
+ * 플로우 알림(이슈 #115) — 상점이 플로우에 둔 알림 블록(`core.notify`, 채널 `webhook`)이 보낸다. 구매자 알림(알림톡·메일)은 이 이벤트를 받아
7799
+ * 상점이 보낸다(플랫폼은 구매자에게 직접 보내지 않는다). 개인정보는 싣지 않는다
7800
+ */
7801
+ const flowNotificationWebhookEventDataSchema = z.object({
7802
+ orderId: z.string().describe("주문 ID"),
7803
+ orderItemIds: z.array(z.string()).describe("이 알림의 주문상품(묶음 진행이면 여럿)"),
7804
+ event: z.string().describe("상점이 블록에 둔 알림 이름(`custom.<이름>`)"),
7805
+ flowId: z.string(),
7806
+ flowVersion: z.number().int(),
7807
+ state: z.string().describe("알림을 보낸 전이의 도착 상태 키")
7808
+ });
7809
+ const flowNotificationWebhookEventSchema = z.object({
7810
+ ...envelopeFields,
7811
+ type: z.literal("ORDER.FLOW_NOTIFICATION"),
7812
+ data: flowNotificationWebhookEventDataSchema
7813
+ });
7311
7814
  /** 웹훅 요청 본문. `type`으로 판별하며 `data` 형태가 타입별로 다르다 */
7312
7815
  const webhookEventSchema = z.discriminatedUnion("type", [
7313
7816
  orderWebhookEventSchema,
@@ -7316,8 +7819,39 @@ const webhookEventSchema = z.discriminatedUnion("type", [
7316
7819
  claimWebhookEventSchema,
7317
7820
  inquiryWebhookEventSchema,
7318
7821
  reviewWebhookEventSchema,
7319
- productOutOfStockWebhookEventSchema
7822
+ productOutOfStockWebhookEventSchema,
7823
+ flowNotificationWebhookEventSchema
7320
7824
  ]).describe("웹훅 요청 본문 (얇은 이벤트). 개인정보를 싣지 않으며 `data`의 id로 관리 API를 조회한다");
7825
+ /**
7826
+ * 알려진 웹훅 이벤트 타입 — `webhookEventSchema`의 판별 값 목록(이 SDK 버전이 아는 것).
7827
+ * 서버는 새 타입을 구독한 엔드포인트에만 보내지만, 구독을 더 넓힌 수신자를 위해 `parseWebhookEvent`가 모르는 타입을 따로 받는다.
7828
+ */
7829
+ const KNOWN_WEBHOOK_EVENT_TYPES = webhookEventSchema.options.flatMap((option) => {
7830
+ const type = option.shape.type;
7831
+ return "options" in type ? [...type.options] : [type.value];
7832
+ });
7833
+ /** 이 SDK 버전이 모르는 이벤트 — 봉투만 검증하고 `data`는 그대로 둔다 */
7834
+ const unknownWebhookEventSchema = z.object({
7835
+ ...envelopeFields,
7836
+ type: z.string().min(1),
7837
+ data: z.unknown()
7838
+ });
7839
+ /**
7840
+ * 웹훅 본문을 `type`으로 먼저 판별해 읽는다(이슈 #115 결정 25). 알려진 타입은 그 타입의 스키마로 엄격하게 읽고 틀리면 던진다 —
7841
+ * `z.union([known, unknown])`처럼 읽으면 알려진 타입의 파싱 실패가 `known: false`로 조용히 새어 수신자가 처리할 이벤트를 버린다.
7842
+ * 모르는 타입은 봉투만 검증해 `known: false`로 돌려준다(새 이벤트에 옛 SDK가 깨지지 않는다).
7843
+ */
7844
+ function parseWebhookEvent(body) {
7845
+ const type = body?.type;
7846
+ if (typeof type === "string" && KNOWN_WEBHOOK_EVENT_TYPES.includes(type)) return {
7847
+ known: true,
7848
+ event: webhookEventSchema.parse(body)
7849
+ };
7850
+ return {
7851
+ known: false,
7852
+ event: unknownWebhookEventSchema.parse(body)
7853
+ };
7854
+ }
7321
7855
  //#endregion
7322
7856
  //#region src/session.ts
7323
7857
  /**
@@ -7498,4 +8032,4 @@ function createStoreSession(options) {
7498
8032
  };
7499
8033
  }
7500
8034
  //#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 };
8035
+ 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, flowAssignmentRuleSchema, 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, saveFlowAssignmentRulesRequestSchema, 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, testFlowAssignmentRequestSchema, 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 };