@sayren/store-sdk 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -921,8 +921,8 @@ export declare const oauthClientRegistrationRequestSchema: z.ZodObject<{
921
921
  }>>;
922
922
  redirect_uris: z.ZodOptional<z.ZodArray<z.ZodString>>;
923
923
  grant_types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
924
- refresh_token: "refresh_token";
925
924
  authorization_code: "authorization_code";
925
+ refresh_token: "refresh_token";
926
926
  client_credentials: "client_credentials";
927
927
  "urn:ietf:params:oauth:grant-type:token-exchange": "urn:ietf:params:oauth:grant-type:token-exchange";
928
928
  }>>>;
@@ -1171,11 +1171,11 @@ export type ApiTokenCreateRequest = z.infer<typeof apiTokenCreateRequestSchema>;
1171
1171
  //#endregion
1172
1172
  //#region src/schemas/category.d.ts
1173
1173
  export declare const categoryProductSortSchema: z.ZodEnum<{
1174
+ NAME: "NAME";
1174
1175
  RECENT: "RECENT";
1175
1176
  POPULAR: "POPULAR";
1176
1177
  PRICE_LOW: "PRICE_LOW";
1177
1178
  PRICE_HIGH: "PRICE_HIGH";
1178
- NAME: "NAME";
1179
1179
  }>;
1180
1180
  export type CategoryProductSort = z.infer<typeof categoryProductSortSchema>;
1181
1181
  export declare const categorySchema: z.ZodObject<{
@@ -1191,11 +1191,11 @@ export declare const categorySchema: z.ZodObject<{
1191
1191
  showPc: z.ZodBoolean;
1192
1192
  showMobile: z.ZodBoolean;
1193
1193
  productSort: z.ZodEnum<{
1194
+ NAME: "NAME";
1194
1195
  RECENT: "RECENT";
1195
1196
  POPULAR: "POPULAR";
1196
1197
  PRICE_LOW: "PRICE_LOW";
1197
1198
  PRICE_HIGH: "PRICE_HIGH";
1198
- NAME: "NAME";
1199
1199
  }>;
1200
1200
  metaTitle: z.ZodNullable<z.ZodString>;
1201
1201
  metaDescription: z.ZodNullable<z.ZodString>;
@@ -1221,11 +1221,11 @@ export declare const categoryWithPathSchema: z.ZodObject<{
1221
1221
  showPc: z.ZodBoolean;
1222
1222
  showMobile: z.ZodBoolean;
1223
1223
  productSort: z.ZodEnum<{
1224
+ NAME: "NAME";
1224
1225
  RECENT: "RECENT";
1225
1226
  POPULAR: "POPULAR";
1226
1227
  PRICE_LOW: "PRICE_LOW";
1227
1228
  PRICE_HIGH: "PRICE_HIGH";
1228
- NAME: "NAME";
1229
1229
  }>;
1230
1230
  metaTitle: z.ZodNullable<z.ZodString>;
1231
1231
  metaDescription: z.ZodNullable<z.ZodString>;
@@ -1246,11 +1246,11 @@ export declare const categoryWithPathSchema: z.ZodObject<{
1246
1246
  showPc: z.ZodBoolean;
1247
1247
  showMobile: z.ZodBoolean;
1248
1248
  productSort: z.ZodEnum<{
1249
+ NAME: "NAME";
1249
1250
  RECENT: "RECENT";
1250
1251
  POPULAR: "POPULAR";
1251
1252
  PRICE_LOW: "PRICE_LOW";
1252
1253
  PRICE_HIGH: "PRICE_HIGH";
1253
- NAME: "NAME";
1254
1254
  }>;
1255
1255
  metaTitle: z.ZodNullable<z.ZodString>;
1256
1256
  metaDescription: z.ZodNullable<z.ZodString>;
@@ -1274,11 +1274,11 @@ export declare const categorySearchResultSchema: z.ZodObject<{
1274
1274
  showPc: z.ZodBoolean;
1275
1275
  showMobile: z.ZodBoolean;
1276
1276
  productSort: z.ZodEnum<{
1277
+ NAME: "NAME";
1277
1278
  RECENT: "RECENT";
1278
1279
  POPULAR: "POPULAR";
1279
1280
  PRICE_LOW: "PRICE_LOW";
1280
1281
  PRICE_HIGH: "PRICE_HIGH";
1281
- NAME: "NAME";
1282
1282
  }>;
1283
1283
  metaTitle: z.ZodNullable<z.ZodString>;
1284
1284
  metaDescription: z.ZodNullable<z.ZodString>;
@@ -1299,11 +1299,11 @@ export declare const categorySearchResultSchema: z.ZodObject<{
1299
1299
  showPc: z.ZodBoolean;
1300
1300
  showMobile: z.ZodBoolean;
1301
1301
  productSort: z.ZodEnum<{
1302
+ NAME: "NAME";
1302
1303
  RECENT: "RECENT";
1303
1304
  POPULAR: "POPULAR";
1304
1305
  PRICE_LOW: "PRICE_LOW";
1305
1306
  PRICE_HIGH: "PRICE_HIGH";
1306
- NAME: "NAME";
1307
1307
  }>;
1308
1308
  metaTitle: z.ZodNullable<z.ZodString>;
1309
1309
  metaDescription: z.ZodNullable<z.ZodString>;
@@ -1335,11 +1335,11 @@ export declare const categoryCreateRequestSchema: z.ZodObject<{
1335
1335
  showPc: z.ZodOptional<z.ZodBoolean>;
1336
1336
  showMobile: z.ZodOptional<z.ZodBoolean>;
1337
1337
  productSort: z.ZodOptional<z.ZodEnum<{
1338
+ NAME: "NAME";
1338
1339
  RECENT: "RECENT";
1339
1340
  POPULAR: "POPULAR";
1340
1341
  PRICE_LOW: "PRICE_LOW";
1341
1342
  PRICE_HIGH: "PRICE_HIGH";
1342
- NAME: "NAME";
1343
1343
  }>>;
1344
1344
  metaTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1345
1345
  metaDescription: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -1354,11 +1354,11 @@ export declare const categoryPatchRequestSchema: z.ZodObject<{
1354
1354
  showPc: z.ZodOptional<z.ZodBoolean>;
1355
1355
  showMobile: z.ZodOptional<z.ZodBoolean>;
1356
1356
  productSort: z.ZodOptional<z.ZodEnum<{
1357
+ NAME: "NAME";
1357
1358
  RECENT: "RECENT";
1358
1359
  POPULAR: "POPULAR";
1359
1360
  PRICE_LOW: "PRICE_LOW";
1360
1361
  PRICE_HIGH: "PRICE_HIGH";
1361
- NAME: "NAME";
1362
1362
  }>>;
1363
1363
  metaTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1364
1364
  metaDescription: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -3238,6 +3238,16 @@ export declare const orderItemSchema: z.ZodObject<{
3238
3238
  productName: z.ZodString;
3239
3239
  optionId: z.ZodNullable<z.ZodString>;
3240
3240
  optionName: z.ZodNullable<z.ZodString>;
3241
+ optionSelections: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3242
+ kind: z.ZodString;
3243
+ groupName: z.ZodString;
3244
+ valueName: z.ZodString;
3245
+ additionalPrice: z.ZodNumber;
3246
+ }, z.core.$strip>>>>;
3247
+ customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3248
+ label: z.ZodString;
3249
+ value: z.ZodString;
3250
+ }, z.core.$strip>>>>;
3241
3251
  sellerCode: z.ZodNullable<z.ZodString>;
3242
3252
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3243
3253
  type: z.ZodLiteral<"SHIPPING">;
@@ -3387,6 +3397,16 @@ export declare const orderSchema: z.ZodObject<{
3387
3397
  productName: z.ZodString;
3388
3398
  optionId: z.ZodNullable<z.ZodString>;
3389
3399
  optionName: z.ZodNullable<z.ZodString>;
3400
+ optionSelections: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3401
+ kind: z.ZodString;
3402
+ groupName: z.ZodString;
3403
+ valueName: z.ZodString;
3404
+ additionalPrice: z.ZodNumber;
3405
+ }, z.core.$strip>>>>;
3406
+ customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3407
+ label: z.ZodString;
3408
+ value: z.ZodString;
3409
+ }, z.core.$strip>>>>;
3390
3410
  sellerCode: z.ZodNullable<z.ZodString>;
3391
3411
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3392
3412
  type: z.ZodLiteral<"SHIPPING">;
@@ -3493,6 +3513,16 @@ export declare const orderItemPageSchema: z.ZodObject<{
3493
3513
  productName: z.ZodString;
3494
3514
  optionId: z.ZodNullable<z.ZodString>;
3495
3515
  optionName: z.ZodNullable<z.ZodString>;
3516
+ optionSelections: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3517
+ kind: z.ZodString;
3518
+ groupName: z.ZodString;
3519
+ valueName: z.ZodString;
3520
+ additionalPrice: z.ZodNumber;
3521
+ }, z.core.$strip>>>>;
3522
+ customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3523
+ label: z.ZodString;
3524
+ value: z.ZodString;
3525
+ }, z.core.$strip>>>>;
3496
3526
  sellerCode: z.ZodNullable<z.ZodString>;
3497
3527
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3498
3528
  type: z.ZodLiteral<"SHIPPING">;
@@ -4851,8 +4881,124 @@ export declare const productVariantSchema: z.ZodObject<{
4851
4881
  weightGram: z.ZodNullable<z.ZodNumber>;
4852
4882
  sellerCode: z.ZodNullable<z.ZodString>;
4853
4883
  usable: z.ZodBoolean;
4884
+ hasOrders: z.ZodOptional<z.ZodBoolean>;
4854
4885
  }, z.core.$strip>;
4855
4886
  export type ProductVariant = z.infer<typeof productVariantSchema>;
4887
+ /** 옵션 축(그룹) 최대 개수 — 스키마 상한의 단일 원천 */
4888
+ export declare const MAX_OPTION_GROUPS = 3;
4889
+ /** 축 하나가 가질 수 있는 값의 최대 개수 */
4890
+ export declare const MAX_VALUES_PER_GROUP = 100;
4891
+ /** 상품 하나가 가질 수 있는 variant(SKU) 최대 개수 */
4892
+ export declare const MAX_VARIANTS = 500;
4893
+ /** 추가 선택 옵션명 최대 개수 */
4894
+ export declare const MAX_ADDON_GROUPS = 5;
4895
+ /** 직접 입력 항목 최대 개수 */
4896
+ export declare const MAX_CUSTOM_INPUTS = 5;
4897
+ /** 직접 입력 항목 최대 글자 수의 상한 */
4898
+ export declare const MAX_CUSTOM_INPUT_LENGTH = 200;
4899
+ /** 조합 수가 이 값 이상이면 콘솔이 경고한다(상한은 `MAX_VARIANTS`) */
4900
+ export declare const VARIANT_COUNT_WARNING = 100;
4901
+ /**
4902
+ * 옵션 값 정렬 순서 — 등록순·가나다순·낮은 추가금순·높은 추가금순. 서버가 저장할 때 이 순서로 값의 `sortOrder`를 매긴다.
4903
+ * 추가금순은 추가 선택 값이면 값의 추가금, 조합 값이면 그 값이 든 조합 추가금의 최솟값으로 비교하고 같으면 등록순이다.
4904
+ */
4905
+ export declare const optionSortSchema: z.ZodEnum<{
4906
+ REGISTERED: "REGISTERED";
4907
+ NAME: "NAME";
4908
+ PRICE_ASC: "PRICE_ASC";
4909
+ PRICE_DESC: "PRICE_DESC";
4910
+ }>;
4911
+ export type OptionSort = z.infer<typeof optionSortSchema>;
4912
+ /** 추가 선택 값 — 예: 옵션명 "선물 포장"의 값 "포장함"(+2,000원) */
4913
+ export declare const addonValueSchema: z.ZodObject<{
4914
+ valueId: z.ZodString;
4915
+ name: z.ZodString;
4916
+ sortOrder: z.ZodNumber;
4917
+ additionalPrice: z.ZodNumber;
4918
+ usable: z.ZodBoolean;
4919
+ }, z.core.$strip>;
4920
+ export type AddonValue = z.infer<typeof addonValueSchema>;
4921
+ /** 추가 선택 옵션명 */
4922
+ export declare const addonGroupSchema: z.ZodObject<{
4923
+ groupId: z.ZodString;
4924
+ name: z.ZodString;
4925
+ sortOrder: z.ZodNumber;
4926
+ required: z.ZodBoolean;
4927
+ values: z.ZodArray<z.ZodObject<{
4928
+ valueId: z.ZodString;
4929
+ name: z.ZodString;
4930
+ sortOrder: z.ZodNumber;
4931
+ additionalPrice: z.ZodNumber;
4932
+ usable: z.ZodBoolean;
4933
+ }, z.core.$strip>>;
4934
+ }, z.core.$strip>;
4935
+ export type AddonGroup = z.infer<typeof addonGroupSchema>;
4936
+ /** 직접 입력 항목 — 예: 각인 문구 */
4937
+ export declare const customInputSchema: z.ZodObject<{
4938
+ inputId: z.ZodString;
4939
+ label: z.ZodString;
4940
+ placeholder: z.ZodNullable<z.ZodString>;
4941
+ maxLength: z.ZodNumber;
4942
+ required: z.ZodBoolean;
4943
+ usable: z.ZodBoolean;
4944
+ sortOrder: z.ZodNumber;
4945
+ }, z.core.$strip>;
4946
+ export type CustomInput = z.infer<typeof customInputSchema>;
4947
+ /**
4948
+ * 직접 입력 항목명에 쓸 수 없는 개인정보성 단어 — 콘솔 검사와 서버 400(`CUSTOM_INPUT_LABEL_FORBIDDEN`)이 이 목록 하나를 쓴다.
4949
+ * 구매자 개인정보는 주문 정보로 받는다. 직접 입력 항목으로 받으면 보관·파기 규칙 밖에 남는다.
4950
+ */
4951
+ export declare const CUSTOM_INPUT_FORBIDDEN_WORDS: readonly ["연락처", "전화", "휴대폰", "핸드폰", "폰번호", "메일", "주소", "주민", "생년월일", "생일", "실명", "계좌", "카드번호", "비밀번호", "여권", "통관", "phone", "mobile", "mail", "address"];
4952
+ /**
4953
+ * 직접 입력 항목명·입력 안내에 든 개인정보성 금지어. 없으면 null. 공백·기호·대소문자·전각을 무시한다.
4954
+ * 서버는 항목명과 입력 안내 둘 다 이 함수로 검사한다(안내에 「연락처를 적어 주십시오」라고 쓰는 우회를 막는다).
4955
+ */
4956
+ export declare function customInputLabelForbiddenWord(label: string): string | null;
4957
+ export declare const addonValueRequestSchema: z.ZodObject<{
4958
+ valueId: z.ZodOptional<z.ZodString>;
4959
+ name: z.ZodString;
4960
+ additionalPrice: z.ZodDefault<z.ZodNumber>;
4961
+ usable: z.ZodDefault<z.ZodBoolean>;
4962
+ }, z.core.$strip>;
4963
+ export type AddonValueRequest = z.infer<typeof addonValueRequestSchema>;
4964
+ export declare const addonGroupRequestSchema: z.ZodObject<{
4965
+ groupId: z.ZodOptional<z.ZodString>;
4966
+ name: z.ZodString;
4967
+ required: z.ZodDefault<z.ZodBoolean>;
4968
+ values: z.ZodArray<z.ZodObject<{
4969
+ valueId: z.ZodOptional<z.ZodString>;
4970
+ name: z.ZodString;
4971
+ additionalPrice: z.ZodDefault<z.ZodNumber>;
4972
+ usable: z.ZodDefault<z.ZodBoolean>;
4973
+ }, z.core.$strip>>;
4974
+ }, z.core.$strip>;
4975
+ export type AddonGroupRequest = z.infer<typeof addonGroupRequestSchema>;
4976
+ export declare const customInputRequestSchema: z.ZodObject<{
4977
+ inputId: z.ZodOptional<z.ZodString>;
4978
+ label: z.ZodString;
4979
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4980
+ maxLength: z.ZodNumber;
4981
+ required: z.ZodDefault<z.ZodBoolean>;
4982
+ usable: z.ZodDefault<z.ZodBoolean>;
4983
+ }, z.core.$strip>;
4984
+ export type CustomInputRequest = z.infer<typeof customInputRequestSchema>;
4985
+ /**
4986
+ * 주문상품·장바구니·주문서 줄의 옵션 선택 스냅샷 한 칸 — 주문 시점 이름이다(상품을 고쳐도 바뀌지 않는다).
4987
+ * 조합 옵션은 옵션명마다 한 칸이고 추가금은 조합 단위라 0이다(조합 추가금은 단가에 들어 있다). 추가 선택은 값의 추가금이다.
4988
+ */
4989
+ export declare const optionSelectionSchema: z.ZodObject<{
4990
+ kind: z.ZodString;
4991
+ groupName: z.ZodString;
4992
+ valueName: z.ZodString;
4993
+ additionalPrice: z.ZodNumber;
4994
+ }, z.core.$strip>;
4995
+ export type OptionSelection = z.infer<typeof optionSelectionSchema>;
4996
+ /** 구매자가 적은 직접 입력값 — 주문 시점 항목명과 값 */
4997
+ export declare const customInputValueSchema: z.ZodObject<{
4998
+ label: z.ZodString;
4999
+ value: z.ZodString;
5000
+ }, z.core.$strip>;
5001
+ export type CustomInputValue = z.infer<typeof customInputValueSchema>;
4856
5002
  export declare const discountSchema: z.ZodObject<{
4857
5003
  productId: z.ZodString;
4858
5004
  discountType: z.ZodEnum<{
@@ -4911,7 +5057,36 @@ export declare const productSchema: z.ZodObject<{
4911
5057
  weightGram: z.ZodNullable<z.ZodNumber>;
4912
5058
  sellerCode: z.ZodNullable<z.ZodString>;
4913
5059
  usable: z.ZodBoolean;
5060
+ hasOrders: z.ZodOptional<z.ZodBoolean>;
4914
5061
  }, z.core.$strip>>;
5062
+ addonGroups: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
5063
+ groupId: z.ZodString;
5064
+ name: z.ZodString;
5065
+ sortOrder: z.ZodNumber;
5066
+ required: z.ZodBoolean;
5067
+ values: z.ZodArray<z.ZodObject<{
5068
+ valueId: z.ZodString;
5069
+ name: z.ZodString;
5070
+ sortOrder: z.ZodNumber;
5071
+ additionalPrice: z.ZodNumber;
5072
+ usable: z.ZodBoolean;
5073
+ }, z.core.$strip>>;
5074
+ }, z.core.$strip>>>>;
5075
+ customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
5076
+ inputId: z.ZodString;
5077
+ label: z.ZodString;
5078
+ placeholder: z.ZodNullable<z.ZodString>;
5079
+ maxLength: z.ZodNumber;
5080
+ required: z.ZodBoolean;
5081
+ usable: z.ZodBoolean;
5082
+ sortOrder: z.ZodNumber;
5083
+ }, z.core.$strip>>>>;
5084
+ optionSort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
5085
+ REGISTERED: "REGISTERED";
5086
+ NAME: "NAME";
5087
+ PRICE_ASC: "PRICE_ASC";
5088
+ PRICE_DESC: "PRICE_DESC";
5089
+ }>>>;
4915
5090
  fulfillment: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
4916
5091
  type: z.ZodLiteral<"SHIPPING">;
4917
5092
  shipping: z.ZodObject<{
@@ -4982,12 +5157,6 @@ export interface ProductImageRejection {
4982
5157
  * — 외부 이미지 CDN은 확장자 없는 키를 쓰는 경우가 흔하고, 주소만으로는 실제 형식을 알 수 없다.
4983
5158
  */
4984
5159
  export declare function productImageRejection(url: string): ProductImageRejection | null;
4985
- /** 옵션 축(그룹) 최대 개수 — 스키마 상한의 단일 원천 */
4986
- export declare const MAX_OPTION_GROUPS = 3;
4987
- /** 축 하나가 가질 수 있는 값의 최대 개수 */
4988
- export declare const MAX_VALUES_PER_GROUP = 100;
4989
- /** 상품 하나가 가질 수 있는 variant(SKU) 최대 개수 */
4990
- export declare const MAX_VARIANTS = 500;
4991
5160
  export declare const optionValueRequestSchema: z.ZodObject<{
4992
5161
  valueId: z.ZodOptional<z.ZodString>;
4993
5162
  name: z.ZodString;
@@ -5037,6 +5206,31 @@ export declare const optionModelRequestSchema: z.ZodObject<{
5037
5206
  sellerCode: z.ZodOptional<z.ZodString>;
5038
5207
  usable: z.ZodDefault<z.ZodBoolean>;
5039
5208
  }, z.core.$strip>>;
5209
+ addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
5210
+ groupId: z.ZodOptional<z.ZodString>;
5211
+ name: z.ZodString;
5212
+ required: z.ZodDefault<z.ZodBoolean>;
5213
+ values: z.ZodArray<z.ZodObject<{
5214
+ valueId: z.ZodOptional<z.ZodString>;
5215
+ name: z.ZodString;
5216
+ additionalPrice: z.ZodDefault<z.ZodNumber>;
5217
+ usable: z.ZodDefault<z.ZodBoolean>;
5218
+ }, z.core.$strip>>;
5219
+ }, z.core.$strip>>>;
5220
+ customInputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
5221
+ inputId: z.ZodOptional<z.ZodString>;
5222
+ label: z.ZodString;
5223
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5224
+ maxLength: z.ZodNumber;
5225
+ required: z.ZodDefault<z.ZodBoolean>;
5226
+ usable: z.ZodDefault<z.ZodBoolean>;
5227
+ }, z.core.$strip>>>;
5228
+ optionSort: z.ZodOptional<z.ZodEnum<{
5229
+ REGISTERED: "REGISTERED";
5230
+ NAME: "NAME";
5231
+ PRICE_ASC: "PRICE_ASC";
5232
+ PRICE_DESC: "PRICE_DESC";
5233
+ }>>;
5040
5234
  }, z.core.$strip>;
5041
5235
  export type OptionModelRequest = z.infer<typeof optionModelRequestSchema>;
5042
5236
  /** GET /products/{productId}/options 응답 */
@@ -5063,7 +5257,36 @@ export declare const optionModelSchema: z.ZodObject<{
5063
5257
  weightGram: z.ZodNullable<z.ZodNumber>;
5064
5258
  sellerCode: z.ZodNullable<z.ZodString>;
5065
5259
  usable: z.ZodBoolean;
5260
+ hasOrders: z.ZodOptional<z.ZodBoolean>;
5066
5261
  }, z.core.$strip>>;
5262
+ addonGroups: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
5263
+ groupId: z.ZodString;
5264
+ name: z.ZodString;
5265
+ sortOrder: z.ZodNumber;
5266
+ required: z.ZodBoolean;
5267
+ values: z.ZodArray<z.ZodObject<{
5268
+ valueId: z.ZodString;
5269
+ name: z.ZodString;
5270
+ sortOrder: z.ZodNumber;
5271
+ additionalPrice: z.ZodNumber;
5272
+ usable: z.ZodBoolean;
5273
+ }, z.core.$strip>>;
5274
+ }, z.core.$strip>>>>;
5275
+ customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
5276
+ inputId: z.ZodString;
5277
+ label: z.ZodString;
5278
+ placeholder: z.ZodNullable<z.ZodString>;
5279
+ maxLength: z.ZodNumber;
5280
+ required: z.ZodBoolean;
5281
+ usable: z.ZodBoolean;
5282
+ sortOrder: z.ZodNumber;
5283
+ }, z.core.$strip>>>>;
5284
+ optionSort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
5285
+ REGISTERED: "REGISTERED";
5286
+ NAME: "NAME";
5287
+ PRICE_ASC: "PRICE_ASC";
5288
+ PRICE_DESC: "PRICE_DESC";
5289
+ }>>>;
5067
5290
  }, z.core.$strip>;
5068
5291
  export type OptionModel = z.infer<typeof optionModelSchema>;
5069
5292
  /**
@@ -5103,6 +5326,7 @@ export declare const productCreateRequestSchema: z.ZodObject<{
5103
5326
  }, z.core.$strict>, z.ZodObject<{
5104
5327
  type: z.ZodLiteral<"MANUAL">;
5105
5328
  }, z.core.$strict>], "type">>;
5329
+ sourceOptionSetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
5106
5330
  optionGroups: z.ZodDefault<z.ZodArray<z.ZodObject<{
5107
5331
  groupId: z.ZodOptional<z.ZodString>;
5108
5332
  name: z.ZodString;
@@ -5123,6 +5347,31 @@ export declare const productCreateRequestSchema: z.ZodObject<{
5123
5347
  sellerCode: z.ZodOptional<z.ZodString>;
5124
5348
  usable: z.ZodDefault<z.ZodBoolean>;
5125
5349
  }, z.core.$strip>>;
5350
+ addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
5351
+ groupId: z.ZodOptional<z.ZodString>;
5352
+ name: z.ZodString;
5353
+ required: z.ZodDefault<z.ZodBoolean>;
5354
+ values: z.ZodArray<z.ZodObject<{
5355
+ valueId: z.ZodOptional<z.ZodString>;
5356
+ name: z.ZodString;
5357
+ additionalPrice: z.ZodDefault<z.ZodNumber>;
5358
+ usable: z.ZodDefault<z.ZodBoolean>;
5359
+ }, z.core.$strip>>;
5360
+ }, z.core.$strip>>>;
5361
+ customInputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
5362
+ inputId: z.ZodOptional<z.ZodString>;
5363
+ label: z.ZodString;
5364
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5365
+ maxLength: z.ZodNumber;
5366
+ required: z.ZodDefault<z.ZodBoolean>;
5367
+ usable: z.ZodDefault<z.ZodBoolean>;
5368
+ }, z.core.$strip>>>;
5369
+ optionSort: z.ZodOptional<z.ZodEnum<{
5370
+ REGISTERED: "REGISTERED";
5371
+ NAME: "NAME";
5372
+ PRICE_ASC: "PRICE_ASC";
5373
+ PRICE_DESC: "PRICE_DESC";
5374
+ }>>;
5126
5375
  name: z.ZodString;
5127
5376
  categoryId: z.ZodString;
5128
5377
  salePrice: z.ZodNumber;
@@ -5162,6 +5411,7 @@ export declare const productReplaceRequestSchema: z.ZodObject<{
5162
5411
  }, z.core.$strict>, z.ZodObject<{
5163
5412
  type: z.ZodLiteral<"MANUAL">;
5164
5413
  }, z.core.$strict>], "type">>;
5414
+ sourceOptionSetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
5165
5415
  optionGroups: z.ZodDefault<z.ZodArray<z.ZodObject<{
5166
5416
  groupId: z.ZodOptional<z.ZodString>;
5167
5417
  name: z.ZodString;
@@ -5182,6 +5432,31 @@ export declare const productReplaceRequestSchema: z.ZodObject<{
5182
5432
  sellerCode: z.ZodOptional<z.ZodString>;
5183
5433
  usable: z.ZodDefault<z.ZodBoolean>;
5184
5434
  }, z.core.$strip>>;
5435
+ addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
5436
+ groupId: z.ZodOptional<z.ZodString>;
5437
+ name: z.ZodString;
5438
+ required: z.ZodDefault<z.ZodBoolean>;
5439
+ values: z.ZodArray<z.ZodObject<{
5440
+ valueId: z.ZodOptional<z.ZodString>;
5441
+ name: z.ZodString;
5442
+ additionalPrice: z.ZodDefault<z.ZodNumber>;
5443
+ usable: z.ZodDefault<z.ZodBoolean>;
5444
+ }, z.core.$strip>>;
5445
+ }, z.core.$strip>>>;
5446
+ customInputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
5447
+ inputId: z.ZodOptional<z.ZodString>;
5448
+ label: z.ZodString;
5449
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5450
+ maxLength: z.ZodNumber;
5451
+ required: z.ZodDefault<z.ZodBoolean>;
5452
+ usable: z.ZodDefault<z.ZodBoolean>;
5453
+ }, z.core.$strip>>>;
5454
+ optionSort: z.ZodOptional<z.ZodEnum<{
5455
+ REGISTERED: "REGISTERED";
5456
+ NAME: "NAME";
5457
+ PRICE_ASC: "PRICE_ASC";
5458
+ PRICE_DESC: "PRICE_DESC";
5459
+ }>>;
5185
5460
  name: z.ZodString;
5186
5461
  categoryId: z.ZodString;
5187
5462
  salePrice: z.ZodNumber;
@@ -5284,6 +5559,210 @@ export declare const discountRequestSchema: z.ZodObject<{
5284
5559
  }, z.core.$strip>;
5285
5560
  export type DiscountRequest = z.infer<typeof discountRequestSchema>;
5286
5561
  //#endregion
5562
+ //#region src/schemas/saved-option-set.d.ts
5563
+ /**
5564
+ * 저장 옵션 (이슈 #59) — 자주 쓰는 옵션 구성을 이름 붙여 두고 상품 등록에서 불러온다.
5565
+ *
5566
+ * **불러오기는 복사다.** 저장 옵션을 고치거나 지워도 이미 불러온 상품의 옵션은 그대로다. 재고·SKU·사용 여부는 상품마다
5567
+ * 달라 저장하지 않는다. 추가금은 조합별이 아니라 **값별**로 둔다 — 조합 옵션으로 불러오면 조합 추가금은 고른 값 추가금의 합이다.
5568
+ */
5569
+ /** 스토어당 저장 옵션 최대 개수 */
5570
+ export declare const MAX_SAVED_OPTION_SETS = 200;
5571
+ /** 저장 옵션 이름 최대 글자 수 */
5572
+ export declare const MAX_SAVED_OPTION_SET_NAME = 50;
5573
+ /** 옵션명 방식 — `combination`(조합: 값의 조합이 판매 단위가 된다)·`addon`(추가 선택: 재고 없이 추가금만) */
5574
+ export declare const optionGroupKindSchema: z.ZodEnum<{
5575
+ combination: "combination";
5576
+ addon: "addon";
5577
+ }>;
5578
+ export type OptionGroupKind = z.infer<typeof optionGroupKindSchema>;
5579
+ export declare const savedOptionValueSchema: z.ZodObject<{
5580
+ name: z.ZodString;
5581
+ additionalPrice: z.ZodNumber;
5582
+ }, z.core.$strip>;
5583
+ export declare const savedOptionGroupSchema: z.ZodObject<{
5584
+ name: z.ZodString;
5585
+ kind: z.ZodString;
5586
+ required: z.ZodBoolean;
5587
+ values: z.ZodArray<z.ZodObject<{
5588
+ name: z.ZodString;
5589
+ additionalPrice: z.ZodNumber;
5590
+ }, z.core.$strip>>;
5591
+ }, z.core.$strip>;
5592
+ export type SavedOptionGroup = z.infer<typeof savedOptionGroupSchema>;
5593
+ export declare const savedCustomInputSchema: z.ZodObject<{
5594
+ label: z.ZodString;
5595
+ placeholder: z.ZodNullable<z.ZodString>;
5596
+ maxLength: z.ZodNumber;
5597
+ required: z.ZodBoolean;
5598
+ }, z.core.$strip>;
5599
+ export type SavedCustomInput = z.infer<typeof savedCustomInputSchema>;
5600
+ export declare const savedOptionSetSchema: z.ZodObject<{
5601
+ optionSetId: z.ZodString;
5602
+ name: z.ZodString;
5603
+ optionSort: z.ZodEnum<{
5604
+ REGISTERED: "REGISTERED";
5605
+ NAME: "NAME";
5606
+ PRICE_ASC: "PRICE_ASC";
5607
+ PRICE_DESC: "PRICE_DESC";
5608
+ }>;
5609
+ groups: z.ZodArray<z.ZodObject<{
5610
+ name: z.ZodString;
5611
+ kind: z.ZodString;
5612
+ required: z.ZodBoolean;
5613
+ values: z.ZodArray<z.ZodObject<{
5614
+ name: z.ZodString;
5615
+ additionalPrice: z.ZodNumber;
5616
+ }, z.core.$strip>>;
5617
+ }, z.core.$strip>>;
5618
+ customInputs: z.ZodArray<z.ZodObject<{
5619
+ label: z.ZodString;
5620
+ placeholder: z.ZodNullable<z.ZodString>;
5621
+ maxLength: z.ZodNumber;
5622
+ required: z.ZodBoolean;
5623
+ }, z.core.$strip>>;
5624
+ importedProductCount: z.ZodNumber;
5625
+ createdAt: z.ZodString;
5626
+ updatedAt: z.ZodString;
5627
+ }, z.core.$strip>;
5628
+ export type SavedOptionSet = z.infer<typeof savedOptionSetSchema>;
5629
+ export declare const savedOptionValueRequestSchema: z.ZodObject<{
5630
+ name: z.ZodString;
5631
+ additionalPrice: z.ZodDefault<z.ZodNumber>;
5632
+ }, z.core.$strip>;
5633
+ export declare const savedOptionGroupRequestSchema: z.ZodObject<{
5634
+ name: z.ZodString;
5635
+ kind: z.ZodEnum<{
5636
+ combination: "combination";
5637
+ addon: "addon";
5638
+ }>;
5639
+ required: z.ZodDefault<z.ZodBoolean>;
5640
+ values: z.ZodArray<z.ZodObject<{
5641
+ name: z.ZodString;
5642
+ additionalPrice: z.ZodDefault<z.ZodNumber>;
5643
+ }, z.core.$strip>>;
5644
+ }, z.core.$strip>;
5645
+ export type SavedOptionGroupRequest = z.infer<typeof savedOptionGroupRequestSchema>;
5646
+ export declare const savedCustomInputRequestSchema: z.ZodObject<{
5647
+ label: z.ZodString;
5648
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5649
+ maxLength: z.ZodNumber;
5650
+ required: z.ZodDefault<z.ZodBoolean>;
5651
+ }, z.core.$strip>;
5652
+ /**
5653
+ * 저장 옵션 만들기·수정 본문. 조합 옵션명은 최대 `MAX_OPTION_GROUPS`개, 추가 선택은 최대 `MAX_ADDON_GROUPS`개이고
5654
+ * 옵션명과 직접 입력 항목이 모두 비면 400이다. 수정(PUT)은 통째로 바꾼다.
5655
+ */
5656
+ export declare const savedOptionSetRequestSchema: z.ZodObject<{
5657
+ name: z.ZodString;
5658
+ optionSort: z.ZodDefault<z.ZodEnum<{
5659
+ REGISTERED: "REGISTERED";
5660
+ NAME: "NAME";
5661
+ PRICE_ASC: "PRICE_ASC";
5662
+ PRICE_DESC: "PRICE_DESC";
5663
+ }>>;
5664
+ groups: z.ZodDefault<z.ZodArray<z.ZodObject<{
5665
+ name: z.ZodString;
5666
+ kind: z.ZodEnum<{
5667
+ combination: "combination";
5668
+ addon: "addon";
5669
+ }>;
5670
+ required: z.ZodDefault<z.ZodBoolean>;
5671
+ values: z.ZodArray<z.ZodObject<{
5672
+ name: z.ZodString;
5673
+ additionalPrice: z.ZodDefault<z.ZodNumber>;
5674
+ }, z.core.$strip>>;
5675
+ }, z.core.$strip>>>;
5676
+ customInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
5677
+ label: z.ZodString;
5678
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5679
+ maxLength: z.ZodNumber;
5680
+ required: z.ZodDefault<z.ZodBoolean>;
5681
+ }, z.core.$strip>>>;
5682
+ }, z.core.$strip>;
5683
+ export type SavedOptionSetRequest = z.infer<typeof savedOptionSetRequestSchema>;
5684
+ export type SavedOptionSetRequestInput = z.input<typeof savedOptionSetRequestSchema>;
5685
+ /**
5686
+ * 상품에서 저장 (`POST /v1/saved-option-sets/from-product`) — 상품의 현재 옵션을 저장 옵션으로 만든다.
5687
+ *
5688
+ * 조합 추가금이 값별 추가금의 합으로 되돌려지면 값별로 저장하고, 조합마다 제각각이면 추가금을 빼고
5689
+ * 응답 `additionalPriceDropped: true`로 알린다. `replaceOptionSetId`를 주면 그 저장 옵션을 덮어쓴다(이름 중복의 덮어쓰기).
5690
+ */
5691
+ export declare const savedOptionSetFromProductRequestSchema: z.ZodObject<{
5692
+ productId: z.ZodString;
5693
+ name: z.ZodString;
5694
+ includeOptions: z.ZodDefault<z.ZodBoolean>;
5695
+ includeCustomInputs: z.ZodDefault<z.ZodBoolean>;
5696
+ replaceOptionSetId: z.ZodOptional<z.ZodString>;
5697
+ }, z.core.$strip>;
5698
+ export type SavedOptionSetFromProductRequest = z.infer<typeof savedOptionSetFromProductRequestSchema>;
5699
+ export type SavedOptionSetFromProductRequestInput = z.input<typeof savedOptionSetFromProductRequestSchema>;
5700
+ export declare const savedOptionSetFromProductResultSchema: z.ZodObject<{
5701
+ optionSet: z.ZodObject<{
5702
+ optionSetId: z.ZodString;
5703
+ name: z.ZodString;
5704
+ optionSort: z.ZodEnum<{
5705
+ REGISTERED: "REGISTERED";
5706
+ NAME: "NAME";
5707
+ PRICE_ASC: "PRICE_ASC";
5708
+ PRICE_DESC: "PRICE_DESC";
5709
+ }>;
5710
+ groups: z.ZodArray<z.ZodObject<{
5711
+ name: z.ZodString;
5712
+ kind: z.ZodString;
5713
+ required: z.ZodBoolean;
5714
+ values: z.ZodArray<z.ZodObject<{
5715
+ name: z.ZodString;
5716
+ additionalPrice: z.ZodNumber;
5717
+ }, z.core.$strip>>;
5718
+ }, z.core.$strip>>;
5719
+ customInputs: z.ZodArray<z.ZodObject<{
5720
+ label: z.ZodString;
5721
+ placeholder: z.ZodNullable<z.ZodString>;
5722
+ maxLength: z.ZodNumber;
5723
+ required: z.ZodBoolean;
5724
+ }, z.core.$strip>>;
5725
+ importedProductCount: z.ZodNumber;
5726
+ createdAt: z.ZodString;
5727
+ updatedAt: z.ZodString;
5728
+ }, z.core.$strip>;
5729
+ additionalPriceDropped: z.ZodBoolean;
5730
+ }, z.core.$strip>;
5731
+ export type SavedOptionSetFromProductResult = z.infer<typeof savedOptionSetFromProductResultSchema>;
5732
+ /** 구성 필터 — 조합 옵션명·추가 선택 옵션명·직접 입력 항목을 가진 저장 옵션 */
5733
+ export declare const savedOptionSetCompositionSchema: z.ZodEnum<{
5734
+ combination: "combination";
5735
+ addon: "addon";
5736
+ customInput: "customInput";
5737
+ }>;
5738
+ export declare const savedOptionSetSortSchema: z.ZodEnum<{
5739
+ "updatedAt.desc": "updatedAt.desc";
5740
+ "name.asc": "name.asc";
5741
+ "importedProductCount.desc": "importedProductCount.desc";
5742
+ }>;
5743
+ export type SavedOptionSetSort = z.infer<typeof savedOptionSetSortSchema>;
5744
+ export interface SavedOptionSetListParams extends PageParams {
5745
+ keyword?: string;
5746
+ composition?: z.infer<typeof savedOptionSetCompositionSchema>;
5747
+ sort?: SavedOptionSetSort;
5748
+ }
5749
+ /** `GET /v1/saved-option-sets` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열) */
5750
+ export declare const savedOptionSetListQuerySchema: z.ZodObject<{
5751
+ page: z.ZodOptional<z.ZodString>;
5752
+ size: z.ZodOptional<z.ZodString>;
5753
+ keyword: z.ZodOptional<z.ZodString>;
5754
+ composition: z.ZodOptional<z.ZodEnum<{
5755
+ combination: "combination";
5756
+ addon: "addon";
5757
+ customInput: "customInput";
5758
+ }>>;
5759
+ sort: z.ZodOptional<z.ZodEnum<{
5760
+ "updatedAt.desc": "updatedAt.desc";
5761
+ "name.asc": "name.asc";
5762
+ "importedProductCount.desc": "importedProductCount.desc";
5763
+ }>>;
5764
+ }, z.core.$strip>;
5765
+ //#endregion
5287
5766
  //#region src/schemas/store.d.ts
5288
5767
  /**
5289
5768
  * 스토어 코드 규칙 — 스토어프론트 API가 테넌트를 가르는 값이다(`X-Store-Code` 헤더).
@@ -5540,6 +6019,7 @@ export type SellerAddressRequest = z.infer<typeof sellerAddressRequestSchema>;
5540
6019
  * - 409 `STOREFRONT_SITE_CREATE_LIMIT` — 사이트는 스토어당 30일에 3번까지 만든다
5541
6020
  * - 409 `STOREFRONT_SITE_CHANGED` — 읽은 상태(`expected*`)와 현재 상태가 다르다. 다시 읽고 시도한다
5542
6021
  * - 409 `STOREFRONT_SITE_NOT_ACTIVE` — 정지(`SUSPENDED`)된 사이트는 바꾸거나 끌 수 없다
6022
+ * - 409 `STORE_SUSPENDED` — 정지된 스토어에는 사이트를 만들 수 없다
5543
6023
  * - 409 `STOREFRONT_VERSION_NOT_READY` — 빌드가 끝나지 않았거나 실패한 버전은 발행할 수 없다
5544
6024
  * - 409 `STOREFRONT_NO_ROLLBACK_TARGET` — 되돌릴 이전 발행 버전이 없다
5545
6025
  * - 400 `STOREFRONT_SLUG_CONFIRM_MISMATCH` — 호스팅 끄기 확인 입력이 현재 슬러그와 다르다
@@ -5561,6 +6041,16 @@ export type SellerAddressRequest = z.infer<typeof sellerAddressRequestSchema>;
5561
6041
  * - 409 `STOREFRONT_BUILD_IN_PROGRESS` — 이 사이트에 끝나지 않은 빌드가 있다(사이트당 하나)
5562
6042
  * - 404 `STOREFRONT_BUILD_NOT_FOUND`
5563
6043
  * - 502 `STOREFRONT_SANDBOX_UNAVAILABLE` — 편집 Sandbox 호출이 실패했다. 잠시 뒤 다시 한다
6044
+ *
6045
+ * 소스 내려받기·올리기(#60, `/v1/storefront/site/source/**`, `sayren` CLI):
6046
+ * - 409 `SOURCE_CHANGED` — 작업 트리가 내려받은 뒤(`expectedBaseRef`) 바뀌었다(콘솔·AI 편집). `error.details.currentRef`
6047
+ * - 409 `EDIT_SESSION_OPEN` — 편집 환경이 열려 있다. `endEditSession: true`로 끄고 진행할 수 있다
6048
+ * - 409 `SOURCE_BLOBS_MISSING` — 올리지 않은 파일 내용이 있다(`error.details.hashes`). `POST source/blobs`로 올리고 다시 한다
6049
+ * - 409 `DEPENDENCY_REJECTED` — 쓸 수 없는 npm 의존성이다(`error.details.rejected: [{ name, version, reason, detail }]`)
6050
+ * - 413 `SOURCE_TOO_MANY_NEW_FILES` — 한 번에 새 내용이 800개를 넘는다(`error.details.max`). 나눠서 바꾼다
6051
+ * - 400 `DEPENDENCY_FILES_MISMATCH` — `packageJson`·`lockfile` 내용이 목록의 해시와 다르거나 빠졌다
6052
+ * - 400 `INVALID_SOURCE_REF` · `BLOB_HASH_MISMATCH` · `INVALID_FILE_PATH`(`.env*`·작업 트리 밖 경로)
6053
+ * - 404 `STOREFRONT_SOURCE_NOT_FOUND` — 그 스냅샷이 없다
5564
6054
  */
5565
6055
  /**
5566
6056
  * 슬러그 형식 — 스토어 코드와 같은 DNS 라벨 규칙(소문자·숫자·하이픈 3~30자, 하이픈으로 시작·끝 불가)에
@@ -5631,6 +6121,7 @@ export declare const storefrontVersionSchema: z.ZodObject<{
5631
6121
  }>;
5632
6122
  buildId: z.ZodNullable<z.ZodString>;
5633
6123
  createdByType: z.ZodString;
6124
+ createdVia: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5634
6125
  createdAt: z.ZodString;
5635
6126
  }, z.core.$strip>;
5636
6127
  export type StorefrontVersion = z.infer<typeof storefrontVersionSchema>;
@@ -5685,6 +6176,15 @@ export declare const storefrontEditPreviewSchema: z.ZodObject<{
5685
6176
  hostname: z.ZodNullable<z.ZodString>;
5686
6177
  }, z.core.$strip>;
5687
6178
  export type StorefrontEditPreview = z.infer<typeof storefrontEditPreviewSchema>;
6179
+ /**
6180
+ * 사이트 정지 — 운영 정책에 따라 플랫폼 운영자가 사이트를 정지한다. 정지 중에는 방문자에게 정지 안내가 보이고 발행·되돌리기·템플릿 변경·
6181
+ * 공개 전환·슬러그 변경·끄기·편집이 409 `STOREFRONT_SITE_NOT_ACTIVE`다. 셀러가 풀 수 없다(고객센터로 문의한다).
6182
+ */
6183
+ export declare const storefrontSuspensionSchema: z.ZodObject<{
6184
+ reason: z.ZodNullable<z.ZodString>;
6185
+ suspendedAt: z.ZodNullable<z.ZodString>;
6186
+ }, z.core.$strip>;
6187
+ export type StorefrontSuspension = z.infer<typeof storefrontSuspensionSchema>;
5688
6188
  export declare const storefrontSiteSchema: z.ZodObject<{
5689
6189
  siteId: z.ZodString;
5690
6190
  slug: z.ZodString;
@@ -5736,6 +6236,7 @@ export declare const storefrontSiteSchema: z.ZodObject<{
5736
6236
  }>;
5737
6237
  buildId: z.ZodNullable<z.ZodString>;
5738
6238
  createdByType: z.ZodString;
6239
+ createdVia: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5739
6240
  createdAt: z.ZodString;
5740
6241
  }, z.core.$strip>>;
5741
6242
  provisioning: z.ZodObject<{
@@ -5751,6 +6252,10 @@ export declare const storefrontSiteSchema: z.ZodObject<{
5751
6252
  hostname: z.ZodNullable<z.ZodString>;
5752
6253
  }, z.core.$strip>;
5753
6254
  slugChangesRemaining: z.ZodNumber;
6255
+ suspension: z.ZodOptional<z.ZodNullable<z.ZodObject<{
6256
+ reason: z.ZodNullable<z.ZodString>;
6257
+ suspendedAt: z.ZodNullable<z.ZodString>;
6258
+ }, z.core.$strip>>>;
5754
6259
  createdAt: z.ZodString;
5755
6260
  updatedAt: z.ZodString;
5756
6261
  }, z.core.$strip>;
@@ -5811,6 +6316,7 @@ export declare const storefrontHostingSchema: z.ZodObject<{
5811
6316
  }>;
5812
6317
  buildId: z.ZodNullable<z.ZodString>;
5813
6318
  createdByType: z.ZodString;
6319
+ createdVia: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5814
6320
  createdAt: z.ZodString;
5815
6321
  }, z.core.$strip>>;
5816
6322
  provisioning: z.ZodObject<{
@@ -5826,6 +6332,10 @@ export declare const storefrontHostingSchema: z.ZodObject<{
5826
6332
  hostname: z.ZodNullable<z.ZodString>;
5827
6333
  }, z.core.$strip>;
5828
6334
  slugChangesRemaining: z.ZodNumber;
6335
+ suspension: z.ZodOptional<z.ZodNullable<z.ZodObject<{
6336
+ reason: z.ZodNullable<z.ZodString>;
6337
+ suspendedAt: z.ZodNullable<z.ZodString>;
6338
+ }, z.core.$strip>>>;
5829
6339
  createdAt: z.ZodString;
5830
6340
  updatedAt: z.ZodString;
5831
6341
  }, z.core.$strip>>;
@@ -5904,6 +6414,146 @@ export declare const storefrontPreviewLinkSchema: z.ZodObject<{
5904
6414
  expiresAt: z.ZodString;
5905
6415
  }, z.core.$strip>;
5906
6416
  export type StorefrontPreviewLink = z.infer<typeof storefrontPreviewLinkSchema>;
6417
+ /**
6418
+ * 연결할 수 없는 도메인 — 플랫폼이 쓰는 도메인과 그 하위(기본 주소는 슬러그로 바꾼다). 호스팅 도메인은 서버 설정이라
6419
+ * `storefrontCustomHostnameProblem`의 인자로 따로 받는다.
6420
+ */
6421
+ export declare const STOREFRONT_PLATFORM_DOMAINS: readonly string[];
6422
+ /**
6423
+ * 공용 접미사 — 누구나 그 아래 이름을 받는 도메인이라 접미사 자체는 연결할 수 없다. Public Suffix List 전체가 아니라 자주 틀리는
6424
+ * 것만 둔다(여기 없는 접미사도 TXT 소유 확인을 통과할 수 없어 연결되지 않는다 — 이 목록은 추가 단계에서 빨리 알려 주는 안내다).
6425
+ */
6426
+ export declare const STOREFRONT_PUBLIC_SUFFIXES: readonly string[];
6427
+ /** 스토어당 연결할 수 있는 도메인 수 기본값 — 요금제(#44) 전의 상한이다. 실제 값은 `GET …/domains`의 `limit` */
6428
+ export declare const STOREFRONT_CUSTOM_DOMAIN_LIMIT_DEFAULT = 2;
6429
+ /** DNS를 넣을 때까지 기다리는 기간(일) — 지나면 `FAILED`(`DNS_NOT_CONFIGURED`) */
6430
+ export declare const STOREFRONT_DOMAIN_DNS_WAIT_DAYS = 7;
6431
+ /** 연결된 도메인의 DNS가 이 서비스를 가리키지 않아도 연결을 유지하는 기간(일) — 지나면 서버가 해제한다 */
6432
+ export declare const STOREFRONT_DOMAIN_DNS_GRACE_DAYS = 7;
6433
+ /** 소유 확인 TXT 레코드의 이름 앞부분 — `_sayren-verify.{도메인}` */
6434
+ export declare const STOREFRONT_DOMAIN_TXT_LABEL = "_sayren-verify";
6435
+ /**
6436
+ * 도메인 정규화 — 앞뒤 공백·끝 점을 떼고 소문자로 바꾸며 국제화 도메인은 punycode(`xn--`)로 바꾼다. 스킴·경로·포트가 붙은 입력
6437
+ * (`https://www.a.com/`)은 호스트만 남기지 않고 그대로 두어 형식 검사에서 떨어진다(서버는 사용자가 적은 도메인만 받는다).
6438
+ * 변환할 수 없으면 입력을 소문자로만 바꿔 돌려준다(형식 검사가 거부한다).
6439
+ */
6440
+ export declare function normalizeStorefrontHostname(input: string): string;
6441
+ export type StorefrontHostnameProblem = "FORMAT" | "IP_ADDRESS" | "SINGLE_LABEL" | "NON_PUBLIC_TLD" | "PLATFORM_DOMAIN" | "PUBLIC_SUFFIX" | "WILDCARD";
6442
+ /**
6443
+ * 연결할 수 있는 도메인인가(정규화한 값 기준). 문제가 없으면 null이다. 규칙: 253자 이하, 라벨 2개 이상, 라벨은 소문자·숫자·하이픈
6444
+ * 63자 이하(하이픈으로 시작·끝 불가), 최상위 도메인은 영문자이거나 punycode, IP 주소·와일드카드·공개 인터넷 밖 최상위 도메인·
6445
+ * 플랫폼 도메인과 그 하위·공용 접미사 자체는 안 된다. 제어·디스패치 Worker가 형식 규칙의 복제본을 들고 있다(api
6446
+ * `test/storefront-hosting-parity.spec.ts`가 대조한다).
6447
+ */
6448
+ export declare function storefrontCustomHostnameProblem(hostname: string, hostingDomain?: string): StorefrontHostnameProblem | null;
6449
+ /** 소유 확인 TXT 레코드의 전체 이름 */
6450
+ export declare function storefrontDomainTxtNameOf(hostname: string): string;
6451
+ export declare const storefrontCustomDomainStatusSchema: z.ZodEnum<{
6452
+ ACTIVE: "ACTIVE";
6453
+ FAILED: "FAILED";
6454
+ PENDING_DNS: "PENDING_DNS";
6455
+ PENDING_VALIDATION: "PENDING_VALIDATION";
6456
+ }>;
6457
+ export type StorefrontCustomDomainStatus = z.infer<typeof storefrontCustomDomainStatusSchema>;
6458
+ export declare const storefrontDnsRecordSchema: z.ZodObject<{
6459
+ type: z.ZodEnum<{
6460
+ CNAME: "CNAME";
6461
+ TXT: "TXT";
6462
+ }>;
6463
+ name: z.ZodString;
6464
+ value: z.ZodString;
6465
+ purpose: z.ZodEnum<{
6466
+ ROUTING: "ROUTING";
6467
+ OWNERSHIP: "OWNERSHIP";
6468
+ }>;
6469
+ }, z.core.$strip>;
6470
+ export type StorefrontDnsRecord = z.infer<typeof storefrontDnsRecordSchema>;
6471
+ export declare const storefrontSiteDomainSchema: z.ZodObject<{
6472
+ domainId: z.ZodString;
6473
+ hostname: z.ZodString;
6474
+ kind: z.ZodEnum<{
6475
+ PLATFORM: "PLATFORM";
6476
+ CUSTOM: "CUSTOM";
6477
+ }>;
6478
+ status: z.ZodEnum<{
6479
+ ACTIVE: "ACTIVE";
6480
+ FAILED: "FAILED";
6481
+ PENDING_DNS: "PENDING_DNS";
6482
+ PENDING_VALIDATION: "PENDING_VALIDATION";
6483
+ }>;
6484
+ isPrimary: z.ZodBoolean;
6485
+ dnsRecords: z.ZodArray<z.ZodObject<{
6486
+ type: z.ZodEnum<{
6487
+ CNAME: "CNAME";
6488
+ TXT: "TXT";
6489
+ }>;
6490
+ name: z.ZodString;
6491
+ value: z.ZodString;
6492
+ purpose: z.ZodEnum<{
6493
+ ROUTING: "ROUTING";
6494
+ OWNERSHIP: "OWNERSHIP";
6495
+ }>;
6496
+ }, z.core.$strip>>;
6497
+ certificateStatus: z.ZodNullable<z.ZodEnum<{
6498
+ ACTIVE: "ACTIVE";
6499
+ PENDING: "PENDING";
6500
+ FAILED: "FAILED";
6501
+ }>>;
6502
+ failureCode: z.ZodNullable<z.ZodString>;
6503
+ verifiedAt: z.ZodNullable<z.ZodString>;
6504
+ activatedAt: z.ZodNullable<z.ZodString>;
6505
+ checkedAt: z.ZodNullable<z.ZodString>;
6506
+ createdAt: z.ZodString;
6507
+ }, z.core.$strip>;
6508
+ export type StorefrontSiteDomain = z.infer<typeof storefrontSiteDomainSchema>;
6509
+ /** `GET /v1/storefront/site/domains` — 사이트의 주소 목록(기본 주소 + 내 도메인)과 연결 설정 */
6510
+ export declare const storefrontSiteDomainsSchema: z.ZodObject<{
6511
+ enabled: z.ZodBoolean;
6512
+ limit: z.ZodNumber;
6513
+ target: z.ZodString;
6514
+ domains: z.ZodArray<z.ZodObject<{
6515
+ domainId: z.ZodString;
6516
+ hostname: z.ZodString;
6517
+ kind: z.ZodEnum<{
6518
+ PLATFORM: "PLATFORM";
6519
+ CUSTOM: "CUSTOM";
6520
+ }>;
6521
+ status: z.ZodEnum<{
6522
+ ACTIVE: "ACTIVE";
6523
+ FAILED: "FAILED";
6524
+ PENDING_DNS: "PENDING_DNS";
6525
+ PENDING_VALIDATION: "PENDING_VALIDATION";
6526
+ }>;
6527
+ isPrimary: z.ZodBoolean;
6528
+ dnsRecords: z.ZodArray<z.ZodObject<{
6529
+ type: z.ZodEnum<{
6530
+ CNAME: "CNAME";
6531
+ TXT: "TXT";
6532
+ }>;
6533
+ name: z.ZodString;
6534
+ value: z.ZodString;
6535
+ purpose: z.ZodEnum<{
6536
+ ROUTING: "ROUTING";
6537
+ OWNERSHIP: "OWNERSHIP";
6538
+ }>;
6539
+ }, z.core.$strip>>;
6540
+ certificateStatus: z.ZodNullable<z.ZodEnum<{
6541
+ ACTIVE: "ACTIVE";
6542
+ PENDING: "PENDING";
6543
+ FAILED: "FAILED";
6544
+ }>>;
6545
+ failureCode: z.ZodNullable<z.ZodString>;
6546
+ verifiedAt: z.ZodNullable<z.ZodString>;
6547
+ activatedAt: z.ZodNullable<z.ZodString>;
6548
+ checkedAt: z.ZodNullable<z.ZodString>;
6549
+ createdAt: z.ZodString;
6550
+ }, z.core.$strip>>;
6551
+ }, z.core.$strip>;
6552
+ export type StorefrontSiteDomains = z.infer<typeof storefrontSiteDomainsSchema>;
6553
+ export declare const addStorefrontDomainRequestSchema: z.ZodObject<{
6554
+ hostname: z.ZodString;
6555
+ }, z.core.$strip>;
6556
+ export type AddStorefrontDomainRequest = z.infer<typeof addStorefrontDomainRequestSchema>;
5907
6557
  /** 플랫폼 전체 동시 편집 환경 상한 */
5908
6558
  export declare const STOREFRONT_EDIT_CAPACITY = 20;
5909
6559
  /** 활동이 없으면 편집 환경이 잠드는 시간(분). 작업 트리는 보존된다 */
@@ -6234,9 +6884,58 @@ export type StorefrontBuildStatus = z.infer<typeof storefrontBuildStatusSchema>;
6234
6884
  export declare const STOREFRONT_BUILD_TERMINAL_STATUSES: readonly StorefrontBuildStatus[];
6235
6885
  /**
6236
6886
  * 빌드 단계 — 이 순서로 돈다. 첫 실패에서 멈추지만 규칙 검증(`VERIFY`)은 실패해도 타입 검사까지 이어서 해 한 번에 알려 준다.
6237
- * `UPLOAD`는 사이트 버전 Worker 업로드다(성공하면 발행할 수 있다). 값은 늘어날 수 있다.
6887
+ * `UPLOAD`는 사이트 버전 Worker 업로드다(성공하면 발행할 수 있다). `DEPENDENCIES`는 빌드 시작 전 의존성 검사(거절 목록·보안 권고)다.
6888
+ * 값은 늘어날 수 있다.
6238
6889
  */
6239
- export declare const STOREFRONT_BUILD_STAGES: readonly ["VERIFY", "RESTORE", "INSTALL", "TYPECHECK", "BUILD", "BUNDLE", "PACK", "UPLOAD"];
6890
+ export declare const STOREFRONT_BUILD_STAGES: readonly ["DEPENDENCIES", "VERIFY", "RESTORE", "INSTALL", "TYPECHECK", "BUILD", "BUNDLE", "PACK", "UPLOAD"];
6891
+ /**
6892
+ * 의존성 검사 결과 한 줄(#61) — 거절(`DEPENDENCY_REJECTED`의 `details.rejected`)·경고(빌드 `dependencies`, 소스 교체 `dependencyWarnings`)가
6893
+ * 같은 모양이다. 대상 패키지와 사유. 셀러가 고칠 수 있게 버전·권고 id·거절 사유를 싣는다.
6894
+ * `reason`: `DENYLISTED`(거절 목록) · `ADVISORY`(보안 권고) · `MALWARE`(악성 코드 권고, 패키지 전체) · `INSTALL_SCRIPT`(루트
6895
+ * package.json의 설치 훅은 거절, 의존성의 설치 스크립트는 경고) · `UNSUPPORTED_SOURCE`(레지스트리 밖 설치 경로) · `BUNDLED_DEPENDENCIES`(묶여
6896
+ * 오는 의존성, 경고) · `INVALID_MANIFEST`(package.json·잠금 파일 형식), 늘어날 수 있다.
6897
+ */
6898
+ export declare const storefrontDependencyFindingSchema: z.ZodObject<{
6899
+ name: z.ZodString;
6900
+ version: z.ZodNullable<z.ZodString>;
6901
+ reason: z.ZodString;
6902
+ detail: z.ZodString;
6903
+ advisory: z.ZodOptional<z.ZodNullable<z.ZodObject<{
6904
+ id: z.ZodString;
6905
+ url: z.ZodNullable<z.ZodString>;
6906
+ severity: z.ZodString;
6907
+ title: z.ZodString;
6908
+ }, z.core.$strip>>>;
6909
+ }, z.core.$strip>;
6910
+ export type StorefrontDependencyFinding = z.infer<typeof storefrontDependencyFindingSchema>;
6911
+ export declare const storefrontBuildDependenciesSchema: z.ZodObject<{
6912
+ checkedPackages: z.ZodNumber;
6913
+ rejected: z.ZodArray<z.ZodObject<{
6914
+ name: z.ZodString;
6915
+ version: z.ZodNullable<z.ZodString>;
6916
+ reason: z.ZodString;
6917
+ detail: z.ZodString;
6918
+ advisory: z.ZodOptional<z.ZodNullable<z.ZodObject<{
6919
+ id: z.ZodString;
6920
+ url: z.ZodNullable<z.ZodString>;
6921
+ severity: z.ZodString;
6922
+ title: z.ZodString;
6923
+ }, z.core.$strip>>>;
6924
+ }, z.core.$strip>>;
6925
+ warnings: z.ZodArray<z.ZodObject<{
6926
+ name: z.ZodString;
6927
+ version: z.ZodNullable<z.ZodString>;
6928
+ reason: z.ZodString;
6929
+ detail: z.ZodString;
6930
+ advisory: z.ZodOptional<z.ZodNullable<z.ZodObject<{
6931
+ id: z.ZodString;
6932
+ url: z.ZodNullable<z.ZodString>;
6933
+ severity: z.ZodString;
6934
+ title: z.ZodString;
6935
+ }, z.core.$strip>>>;
6936
+ }, z.core.$strip>>;
6937
+ }, z.core.$strip>;
6938
+ export type StorefrontBuildDependencies = z.infer<typeof storefrontBuildDependenciesSchema>;
6240
6939
  export declare const storefrontBuildSchema: z.ZodObject<{
6241
6940
  buildId: z.ZodString;
6242
6941
  versionId: z.ZodString;
@@ -6297,6 +6996,33 @@ export declare const storefrontBuildSchema: z.ZodObject<{
6297
6996
  message: z.ZodString;
6298
6997
  nextSteps: z.ZodArray<z.ZodString>;
6299
6998
  }, z.core.$strip>>;
6999
+ dependencies: z.ZodOptional<z.ZodNullable<z.ZodObject<{
7000
+ checkedPackages: z.ZodNumber;
7001
+ rejected: z.ZodArray<z.ZodObject<{
7002
+ name: z.ZodString;
7003
+ version: z.ZodNullable<z.ZodString>;
7004
+ reason: z.ZodString;
7005
+ detail: z.ZodString;
7006
+ advisory: z.ZodOptional<z.ZodNullable<z.ZodObject<{
7007
+ id: z.ZodString;
7008
+ url: z.ZodNullable<z.ZodString>;
7009
+ severity: z.ZodString;
7010
+ title: z.ZodString;
7011
+ }, z.core.$strip>>>;
7012
+ }, z.core.$strip>>;
7013
+ warnings: z.ZodArray<z.ZodObject<{
7014
+ name: z.ZodString;
7015
+ version: z.ZodNullable<z.ZodString>;
7016
+ reason: z.ZodString;
7017
+ detail: z.ZodString;
7018
+ advisory: z.ZodOptional<z.ZodNullable<z.ZodObject<{
7019
+ id: z.ZodString;
7020
+ url: z.ZodNullable<z.ZodString>;
7021
+ severity: z.ZodString;
7022
+ title: z.ZodString;
7023
+ }, z.core.$strip>>>;
7024
+ }, z.core.$strip>>;
7025
+ }, z.core.$strip>>>;
6300
7026
  queuedAt: z.ZodString;
6301
7027
  startedAt: z.ZodNullable<z.ZodString>;
6302
7028
  finishedAt: z.ZodNullable<z.ZodString>;
@@ -6312,6 +7038,7 @@ export declare const storefrontBuildListQuerySchema: z.ZodObject<{
6312
7038
  */
6313
7039
  export declare const createStorefrontVersionRequestSchema: z.ZodObject<{
6314
7040
  message: z.ZodOptional<z.ZodString>;
7041
+ expectedSourceRef: z.ZodOptional<z.ZodString>;
6315
7042
  }, z.core.$strip>;
6316
7043
  export type CreateStorefrontVersionRequest = z.infer<typeof createStorefrontVersionRequestSchema>;
6317
7044
  /** 버전 만들기 응답 (201) — 버전은 `BUILDING`, 빌드는 `QUEUED`로 시작한다. 결과는 `GET builds/{buildId}`로 본다 */
@@ -6335,6 +7062,7 @@ export declare const storefrontVersionCreatedSchema: z.ZodObject<{
6335
7062
  }>;
6336
7063
  buildId: z.ZodNullable<z.ZodString>;
6337
7064
  createdByType: z.ZodString;
7065
+ createdVia: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6338
7066
  createdAt: z.ZodString;
6339
7067
  }, z.core.$strip>;
6340
7068
  build: z.ZodObject<{
@@ -6397,6 +7125,33 @@ export declare const storefrontVersionCreatedSchema: z.ZodObject<{
6397
7125
  message: z.ZodString;
6398
7126
  nextSteps: z.ZodArray<z.ZodString>;
6399
7127
  }, z.core.$strip>>;
7128
+ dependencies: z.ZodOptional<z.ZodNullable<z.ZodObject<{
7129
+ checkedPackages: z.ZodNumber;
7130
+ rejected: z.ZodArray<z.ZodObject<{
7131
+ name: z.ZodString;
7132
+ version: z.ZodNullable<z.ZodString>;
7133
+ reason: z.ZodString;
7134
+ detail: z.ZodString;
7135
+ advisory: z.ZodOptional<z.ZodNullable<z.ZodObject<{
7136
+ id: z.ZodString;
7137
+ url: z.ZodNullable<z.ZodString>;
7138
+ severity: z.ZodString;
7139
+ title: z.ZodString;
7140
+ }, z.core.$strip>>>;
7141
+ }, z.core.$strip>>;
7142
+ warnings: z.ZodArray<z.ZodObject<{
7143
+ name: z.ZodString;
7144
+ version: z.ZodNullable<z.ZodString>;
7145
+ reason: z.ZodString;
7146
+ detail: z.ZodString;
7147
+ advisory: z.ZodOptional<z.ZodNullable<z.ZodObject<{
7148
+ id: z.ZodString;
7149
+ url: z.ZodNullable<z.ZodString>;
7150
+ severity: z.ZodString;
7151
+ title: z.ZodString;
7152
+ }, z.core.$strip>>>;
7153
+ }, z.core.$strip>>;
7154
+ }, z.core.$strip>>>;
6400
7155
  queuedAt: z.ZodString;
6401
7156
  startedAt: z.ZodNullable<z.ZodString>;
6402
7157
  finishedAt: z.ZodNullable<z.ZodString>;
@@ -6413,6 +7168,99 @@ export declare const createStorefrontEditPreviewLinkRequestSchema: z.ZodObject<{
6413
7168
  path: z.ZodOptional<z.ZodString>;
6414
7169
  }, z.core.$strip>;
6415
7170
  export type CreateStorefrontEditPreviewLinkRequest = CreateStorefrontPreviewLinkRequest;
7171
+ /** 압축 파일 조각 하나의 최대 크기(바이트) */
7172
+ export declare const STOREFRONT_SOURCE_PART_BYTES: number;
7173
+ /** 내용 올리기 한 번의 최대 파일 수 */
7174
+ export declare const STOREFRONT_SOURCE_BLOB_BATCH_MAX = 200;
7175
+ /** 작업 트리 파일 수 상한 */
7176
+ export declare const STOREFRONT_WORKSPACE_MAX_FILES = 2000;
7177
+ /** 작업 트리 스냅샷 키 — `sources/{siteId}/{sha256}.tgz` */
7178
+ export declare const storefrontSourceRefSchema: z.ZodString;
7179
+ /** `GET /v1/storefront/site/source` — 지금 작업 트리(편집 환경이 떠 있으면 지금 내용을 고정한다) */
7180
+ export declare const storefrontSourceSchema: z.ZodObject<{
7181
+ siteId: z.ZodString;
7182
+ storeId: z.ZodString;
7183
+ storeCode: z.ZodString;
7184
+ sourceRef: z.ZodString;
7185
+ treeSha256: z.ZodString;
7186
+ files: z.ZodNumber;
7187
+ bytes: z.ZodNumber;
7188
+ archive: z.ZodObject<{
7189
+ format: z.ZodLiteral<"tar+gzip">;
7190
+ bytes: z.ZodNumber;
7191
+ sha256: z.ZodString;
7192
+ parts: z.ZodNumber;
7193
+ partBytes: z.ZodNumber;
7194
+ }, z.core.$strip>;
7195
+ editSessionOpen: z.ZodBoolean;
7196
+ }, z.core.$strip>;
7197
+ export type StorefrontSource = z.infer<typeof storefrontSourceSchema>;
7198
+ export declare const storefrontSourceArchiveQuerySchema: z.ZodObject<{
7199
+ sourceRef: z.ZodString;
7200
+ part: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
7201
+ }, z.core.$strip>;
7202
+ /** `GET /v1/storefront/site/source/archive` — 압축 파일 조각 */
7203
+ export declare const storefrontSourceArchivePartSchema: z.ZodObject<{
7204
+ sourceRef: z.ZodString;
7205
+ part: z.ZodNumber;
7206
+ parts: z.ZodNumber;
7207
+ offset: z.ZodNumber;
7208
+ bytes: z.ZodNumber;
7209
+ totalBytes: z.ZodNumber;
7210
+ content: z.ZodString;
7211
+ }, z.core.$strip>;
7212
+ export type StorefrontSourceArchivePart = z.infer<typeof storefrontSourceArchivePartSchema>;
7213
+ /** `POST /v1/storefront/site/source/blobs` — 파일 내용 올리기(해시 키, 다시 올려도 안전하다). 작업 트리는 바뀌지 않는다 */
7214
+ export declare const uploadStorefrontSourceBlobsRequestSchema: z.ZodObject<{
7215
+ blobs: z.ZodArray<z.ZodObject<{
7216
+ hash: z.ZodString;
7217
+ content: z.ZodString;
7218
+ }, z.core.$strip>>;
7219
+ }, z.core.$strip>;
7220
+ export type UploadStorefrontSourceBlobsRequest = z.infer<typeof uploadStorefrontSourceBlobsRequestSchema>;
7221
+ export declare const storefrontSourceBlobsResultSchema: z.ZodObject<{
7222
+ stored: z.ZodNumber;
7223
+ existing: z.ZodNumber;
7224
+ }, z.core.$strip>;
7225
+ export type StorefrontSourceBlobsResult = z.infer<typeof storefrontSourceBlobsResultSchema>;
7226
+ /**
7227
+ * `PUT /v1/storefront/site/source` — 작업 트리 전체를 이 목록으로 바꾼다(없는 경로는 지운다). 전부 아니면 전무다.
7228
+ * `package.json`·`pnpm-lock.yaml`도 바꿀 수 있고 의존성은 허용 목록 안이어야 한다. `.env*`·작업 트리 밖 경로는 받지 않는다.
7229
+ */
7230
+ export declare const replaceStorefrontSourceRequestSchema: z.ZodObject<{
7231
+ expectedBaseRef: z.ZodOptional<z.ZodString>;
7232
+ files: z.ZodArray<z.ZodObject<{
7233
+ path: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
7234
+ hash: z.ZodString;
7235
+ size: z.ZodNumber;
7236
+ }, z.core.$strip>>;
7237
+ endEditSession: z.ZodOptional<z.ZodBoolean>;
7238
+ packageJson: z.ZodOptional<z.ZodString>;
7239
+ lockfile: z.ZodOptional<z.ZodString>;
7240
+ }, z.core.$strip>;
7241
+ export type ReplaceStorefrontSourceRequest = z.infer<typeof replaceStorefrontSourceRequestSchema>;
7242
+ export declare const storefrontSourceReplacedSchema: z.ZodObject<{
7243
+ sourceRef: z.ZodString;
7244
+ previousRef: z.ZodString;
7245
+ treeSha256: z.ZodString;
7246
+ files: z.ZodNumber;
7247
+ bytes: z.ZodNumber;
7248
+ changed: z.ZodBoolean;
7249
+ endedEditSession: z.ZodBoolean;
7250
+ dependencyWarnings: z.ZodArray<z.ZodObject<{
7251
+ name: z.ZodString;
7252
+ version: z.ZodNullable<z.ZodString>;
7253
+ reason: z.ZodString;
7254
+ detail: z.ZodString;
7255
+ advisory: z.ZodOptional<z.ZodNullable<z.ZodObject<{
7256
+ id: z.ZodString;
7257
+ url: z.ZodNullable<z.ZodString>;
7258
+ severity: z.ZodString;
7259
+ title: z.ZodString;
7260
+ }, z.core.$strip>>>;
7261
+ }, z.core.$strip>>;
7262
+ }, z.core.$strip>;
7263
+ export type StorefrontSourceReplaced = z.infer<typeof storefrontSourceReplacedSchema>;
6416
7264
  //#endregion
6417
7265
  //#region src/schemas/upload.d.ts
6418
7266
  /**
@@ -6817,7 +7665,31 @@ export declare function createStoreClient(options: StoreClientOptions): {
6817
7665
  weightGram: number | null;
6818
7666
  sellerCode: string | null;
6819
7667
  usable: boolean;
7668
+ hasOrders?: boolean | undefined;
7669
+ }[];
7670
+ addonGroups: {
7671
+ groupId: string;
7672
+ name: string;
7673
+ sortOrder: number;
7674
+ required: boolean;
7675
+ values: {
7676
+ valueId: string;
7677
+ name: string;
7678
+ sortOrder: number;
7679
+ additionalPrice: number;
7680
+ usable: boolean;
7681
+ }[];
7682
+ }[];
7683
+ customInputs: {
7684
+ inputId: string;
7685
+ label: string;
7686
+ placeholder: string | null;
7687
+ maxLength: number;
7688
+ required: boolean;
7689
+ usable: boolean;
7690
+ sortOrder: number;
6820
7691
  }[];
7692
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
6821
7693
  fulfillment: UnknownFulfillment | {
6822
7694
  type: "SHIPPING";
6823
7695
  shipping: {
@@ -6889,7 +7761,31 @@ export declare function createStoreClient(options: StoreClientOptions): {
6889
7761
  weightGram: number | null;
6890
7762
  sellerCode: string | null;
6891
7763
  usable: boolean;
7764
+ hasOrders?: boolean | undefined;
7765
+ }[];
7766
+ addonGroups: {
7767
+ groupId: string;
7768
+ name: string;
7769
+ sortOrder: number;
7770
+ required: boolean;
7771
+ values: {
7772
+ valueId: string;
7773
+ name: string;
7774
+ sortOrder: number;
7775
+ additionalPrice: number;
7776
+ usable: boolean;
7777
+ }[];
7778
+ }[];
7779
+ customInputs: {
7780
+ inputId: string;
7781
+ label: string;
7782
+ placeholder: string | null;
7783
+ maxLength: number;
7784
+ required: boolean;
7785
+ usable: boolean;
7786
+ sortOrder: number;
6892
7787
  }[];
7788
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
6893
7789
  fulfillment: UnknownFulfillment | {
6894
7790
  type: "SHIPPING";
6895
7791
  shipping: {
@@ -6961,7 +7857,31 @@ export declare function createStoreClient(options: StoreClientOptions): {
6961
7857
  weightGram: number | null;
6962
7858
  sellerCode: string | null;
6963
7859
  usable: boolean;
7860
+ hasOrders?: boolean | undefined;
7861
+ }[];
7862
+ addonGroups: {
7863
+ groupId: string;
7864
+ name: string;
7865
+ sortOrder: number;
7866
+ required: boolean;
7867
+ values: {
7868
+ valueId: string;
7869
+ name: string;
7870
+ sortOrder: number;
7871
+ additionalPrice: number;
7872
+ usable: boolean;
7873
+ }[];
7874
+ }[];
7875
+ customInputs: {
7876
+ inputId: string;
7877
+ label: string;
7878
+ placeholder: string | null;
7879
+ maxLength: number;
7880
+ required: boolean;
7881
+ usable: boolean;
7882
+ sortOrder: number;
6964
7883
  }[];
7884
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
6965
7885
  fulfillment: UnknownFulfillment | {
6966
7886
  type: "SHIPPING";
6967
7887
  shipping: {
@@ -7037,7 +7957,31 @@ export declare function createStoreClient(options: StoreClientOptions): {
7037
7957
  weightGram: number | null;
7038
7958
  sellerCode: string | null;
7039
7959
  usable: boolean;
7960
+ hasOrders?: boolean | undefined;
7961
+ }[];
7962
+ addonGroups: {
7963
+ groupId: string;
7964
+ name: string;
7965
+ sortOrder: number;
7966
+ required: boolean;
7967
+ values: {
7968
+ valueId: string;
7969
+ name: string;
7970
+ sortOrder: number;
7971
+ additionalPrice: number;
7972
+ usable: boolean;
7973
+ }[];
7974
+ }[];
7975
+ customInputs: {
7976
+ inputId: string;
7977
+ label: string;
7978
+ placeholder: string | null;
7979
+ maxLength: number;
7980
+ required: boolean;
7981
+ usable: boolean;
7982
+ sortOrder: number;
7040
7983
  }[];
7984
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
7041
7985
  }>;
7042
7986
  /**
7043
7987
  * 옵션 모델 전체 교체 — variants는 valueNames로 축 값을 지목한다.
@@ -7066,7 +8010,31 @@ export declare function createStoreClient(options: StoreClientOptions): {
7066
8010
  weightGram: number | null;
7067
8011
  sellerCode: string | null;
7068
8012
  usable: boolean;
8013
+ hasOrders?: boolean | undefined;
8014
+ }[];
8015
+ addonGroups: {
8016
+ groupId: string;
8017
+ name: string;
8018
+ sortOrder: number;
8019
+ required: boolean;
8020
+ values: {
8021
+ valueId: string;
8022
+ name: string;
8023
+ sortOrder: number;
8024
+ additionalPrice: number;
8025
+ usable: boolean;
8026
+ }[];
8027
+ }[];
8028
+ customInputs: {
8029
+ inputId: string;
8030
+ label: string;
8031
+ placeholder: string | null;
8032
+ maxLength: number;
8033
+ required: boolean;
8034
+ usable: boolean;
8035
+ sortOrder: number;
7069
8036
  }[];
8037
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
7070
8038
  }>;
7071
8039
  /** 재고 변경 — stockQuantity(절대값) 또는 adjustment(증감) 하나만 전달한다 */
7072
8040
  updateVariantStock: (productId: string, variantId: string, body: VariantStockRequest) => Promise<{
@@ -7091,6 +8059,140 @@ export declare function createStoreClient(options: StoreClientOptions): {
7091
8059
  }>;
7092
8060
  removeDiscount: (productId: string) => Promise<void>;
7093
8061
  };
8062
+ /**
8063
+ * 저장 옵션 (이슈 #59) — 자주 쓰는 옵션 구성. 불러오기는 복사라 저장 옵션을 고쳐도 불러온 상품은 바뀌지 않는다.
8064
+ * 권한은 상품과 같다(`product:r`·`product:rw`).
8065
+ */
8066
+ savedOptionSets: {
8067
+ list: (params?: SavedOptionSetListParams) => Promise<{
8068
+ page: number;
8069
+ size: number;
8070
+ totalElements: number;
8071
+ totalPages: number;
8072
+ contents: {
8073
+ optionSetId: string;
8074
+ name: string;
8075
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8076
+ groups: {
8077
+ name: string;
8078
+ kind: string;
8079
+ required: boolean;
8080
+ values: {
8081
+ name: string;
8082
+ additionalPrice: number;
8083
+ }[];
8084
+ }[];
8085
+ customInputs: {
8086
+ label: string;
8087
+ placeholder: string | null;
8088
+ maxLength: number;
8089
+ required: boolean;
8090
+ }[];
8091
+ importedProductCount: number;
8092
+ createdAt: string;
8093
+ updatedAt: string;
8094
+ }[];
8095
+ }>;
8096
+ get: (optionSetId: string) => Promise<{
8097
+ optionSetId: string;
8098
+ name: string;
8099
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8100
+ groups: {
8101
+ name: string;
8102
+ kind: string;
8103
+ required: boolean;
8104
+ values: {
8105
+ name: string;
8106
+ additionalPrice: number;
8107
+ }[];
8108
+ }[];
8109
+ customInputs: {
8110
+ label: string;
8111
+ placeholder: string | null;
8112
+ maxLength: number;
8113
+ required: boolean;
8114
+ }[];
8115
+ importedProductCount: number;
8116
+ createdAt: string;
8117
+ updatedAt: string;
8118
+ }>;
8119
+ /** 이름이 겹치면 409 `OPTION_SET_NAME_TAKEN`, 스토어당 200개를 넘으면 409 `OPTION_SET_LIMIT_EXCEEDED` */
8120
+ create: (body: SavedOptionSetRequestInput) => Promise<{
8121
+ optionSetId: string;
8122
+ name: string;
8123
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8124
+ groups: {
8125
+ name: string;
8126
+ kind: string;
8127
+ required: boolean;
8128
+ values: {
8129
+ name: string;
8130
+ additionalPrice: number;
8131
+ }[];
8132
+ }[];
8133
+ customInputs: {
8134
+ label: string;
8135
+ placeholder: string | null;
8136
+ maxLength: number;
8137
+ required: boolean;
8138
+ }[];
8139
+ importedProductCount: number;
8140
+ createdAt: string;
8141
+ updatedAt: string;
8142
+ }>;
8143
+ /** 통째로 바꾼다. 불러온 상품은 바뀌지 않는다 */
8144
+ update: (optionSetId: string, body: SavedOptionSetRequestInput) => Promise<{
8145
+ optionSetId: string;
8146
+ name: string;
8147
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8148
+ groups: {
8149
+ name: string;
8150
+ kind: string;
8151
+ required: boolean;
8152
+ values: {
8153
+ name: string;
8154
+ additionalPrice: number;
8155
+ }[];
8156
+ }[];
8157
+ customInputs: {
8158
+ label: string;
8159
+ placeholder: string | null;
8160
+ maxLength: number;
8161
+ required: boolean;
8162
+ }[];
8163
+ importedProductCount: number;
8164
+ createdAt: string;
8165
+ updatedAt: string;
8166
+ }>;
8167
+ remove: (optionSetId: string) => Promise<void>;
8168
+ /** 상품의 현재 옵션을 저장 옵션으로 만든다(또는 `replaceOptionSetId`를 덮어쓴다) */
8169
+ saveFromProduct: (body: SavedOptionSetFromProductRequestInput) => Promise<{
8170
+ optionSet: {
8171
+ optionSetId: string;
8172
+ name: string;
8173
+ optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8174
+ groups: {
8175
+ name: string;
8176
+ kind: string;
8177
+ required: boolean;
8178
+ values: {
8179
+ name: string;
8180
+ additionalPrice: number;
8181
+ }[];
8182
+ }[];
8183
+ customInputs: {
8184
+ label: string;
8185
+ placeholder: string | null;
8186
+ maxLength: number;
8187
+ required: boolean;
8188
+ }[];
8189
+ importedProductCount: number;
8190
+ createdAt: string;
8191
+ updatedAt: string;
8192
+ };
8193
+ additionalPriceDropped: boolean;
8194
+ }>;
8195
+ };
7094
8196
  categories: {
7095
8197
  list: (params?: {
7096
8198
  parentId?: string;
@@ -7107,7 +8209,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
7107
8209
  visible: boolean;
7108
8210
  showPc: boolean;
7109
8211
  showMobile: boolean;
7110
- productSort: "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH" | "NAME";
8212
+ productSort: "NAME" | "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH";
7111
8213
  metaTitle: string | null;
7112
8214
  metaDescription: string | null;
7113
8215
  metaKeywords: string | null;
@@ -7127,7 +8229,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
7127
8229
  visible: boolean;
7128
8230
  showPc: boolean;
7129
8231
  showMobile: boolean;
7130
- productSort: "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH" | "NAME";
8232
+ productSort: "NAME" | "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH";
7131
8233
  metaTitle: string | null;
7132
8234
  metaDescription: string | null;
7133
8235
  metaKeywords: string | null;
@@ -7146,7 +8248,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
7146
8248
  visible: boolean;
7147
8249
  showPc: boolean;
7148
8250
  showMobile: boolean;
7149
- productSort: "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH" | "NAME";
8251
+ productSort: "NAME" | "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH";
7150
8252
  metaTitle: string | null;
7151
8253
  metaDescription: string | null;
7152
8254
  metaKeywords: string | null;
@@ -7166,7 +8268,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
7166
8268
  visible: boolean;
7167
8269
  showPc: boolean;
7168
8270
  showMobile: boolean;
7169
- productSort: "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH" | "NAME";
8271
+ productSort: "NAME" | "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH";
7170
8272
  metaTitle: string | null;
7171
8273
  metaDescription: string | null;
7172
8274
  metaKeywords: string | null;
@@ -7185,7 +8287,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
7185
8287
  visible: boolean;
7186
8288
  showPc: boolean;
7187
8289
  showMobile: boolean;
7188
- productSort: "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH" | "NAME";
8290
+ productSort: "NAME" | "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH";
7189
8291
  metaTitle: string | null;
7190
8292
  metaDescription: string | null;
7191
8293
  metaKeywords: string | null;
@@ -7214,7 +8316,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
7214
8316
  visible: boolean;
7215
8317
  showPc: boolean;
7216
8318
  showMobile: boolean;
7217
- productSort: "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH" | "NAME";
8319
+ productSort: "NAME" | "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH";
7218
8320
  metaTitle: string | null;
7219
8321
  metaDescription: string | null;
7220
8322
  metaKeywords: string | null;
@@ -7233,7 +8335,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
7233
8335
  visible: boolean;
7234
8336
  showPc: boolean;
7235
8337
  showMobile: boolean;
7236
- productSort: "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH" | "NAME";
8338
+ productSort: "NAME" | "RECENT" | "POPULAR" | "PRICE_LOW" | "PRICE_HIGH";
7237
8339
  metaTitle: string | null;
7238
8340
  metaDescription: string | null;
7239
8341
  metaKeywords: string | null;
@@ -7330,6 +8432,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
7330
8432
  productName: string;
7331
8433
  optionId: string | null;
7332
8434
  optionName: string | null;
8435
+ optionSelections: {
8436
+ kind: string;
8437
+ groupName: string;
8438
+ valueName: string;
8439
+ additionalPrice: number;
8440
+ }[];
8441
+ customInputs: {
8442
+ label: string;
8443
+ value: string;
8444
+ }[];
7333
8445
  sellerCode: string | null;
7334
8446
  fulfillmentSnapshot: UnknownFulfillment | {
7335
8447
  type: "SHIPPING";
@@ -7405,6 +8517,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
7405
8517
  productName: string;
7406
8518
  optionId: string | null;
7407
8519
  optionName: string | null;
8520
+ optionSelections: {
8521
+ kind: string;
8522
+ groupName: string;
8523
+ valueName: string;
8524
+ additionalPrice: number;
8525
+ }[];
8526
+ customInputs: {
8527
+ label: string;
8528
+ value: string;
8529
+ }[];
7408
8530
  sellerCode: string | null;
7409
8531
  fulfillmentSnapshot: UnknownFulfillment | {
7410
8532
  type: "SHIPPING";
@@ -7508,6 +8630,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
7508
8630
  productName: string;
7509
8631
  optionId: string | null;
7510
8632
  optionName: string | null;
8633
+ optionSelections: {
8634
+ kind: string;
8635
+ groupName: string;
8636
+ valueName: string;
8637
+ additionalPrice: number;
8638
+ }[];
8639
+ customInputs: {
8640
+ label: string;
8641
+ value: string;
8642
+ }[];
7511
8643
  sellerCode: string | null;
7512
8644
  fulfillmentSnapshot: UnknownFulfillment | {
7513
8645
  type: "SHIPPING";
@@ -7566,6 +8698,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
7566
8698
  productName: string;
7567
8699
  optionId: string | null;
7568
8700
  optionName: string | null;
8701
+ optionSelections: {
8702
+ kind: string;
8703
+ groupName: string;
8704
+ valueName: string;
8705
+ additionalPrice: number;
8706
+ }[];
8707
+ customInputs: {
8708
+ label: string;
8709
+ value: string;
8710
+ }[];
7569
8711
  sellerCode: string | null;
7570
8712
  fulfillmentSnapshot: UnknownFulfillment | {
7571
8713
  type: "SHIPPING";
@@ -10157,6 +11299,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10157
11299
  buildId: string | null;
10158
11300
  createdByType: string;
10159
11301
  createdAt: string;
11302
+ createdVia?: string | null | undefined;
10160
11303
  } | null;
10161
11304
  provisioning: {
10162
11305
  status: "PENDING" | "FAILED" | "SYNCED";
@@ -10169,6 +11312,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
10169
11312
  slugChangesRemaining: number;
10170
11313
  createdAt: string;
10171
11314
  updatedAt: string;
11315
+ suspension?: {
11316
+ reason: string | null;
11317
+ suspendedAt: string | null;
11318
+ } | null | undefined;
10172
11319
  } | null;
10173
11320
  }>;
10174
11321
  /** `GET /v1/storefront/slug-availability?slug=` — 슬러그를 쓸 수 있는가 */
@@ -10207,6 +11354,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10207
11354
  buildId: string | null;
10208
11355
  createdByType: string;
10209
11356
  createdAt: string;
11357
+ createdVia?: string | null | undefined;
10210
11358
  } | null;
10211
11359
  provisioning: {
10212
11360
  status: "PENDING" | "FAILED" | "SYNCED";
@@ -10219,6 +11367,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
10219
11367
  slugChangesRemaining: number;
10220
11368
  createdAt: string;
10221
11369
  updatedAt: string;
11370
+ suspension?: {
11371
+ reason: string | null;
11372
+ suspendedAt: string | null;
11373
+ } | null | undefined;
10222
11374
  }>;
10223
11375
  /** `POST /v1/storefront/site/template` — 템플릿을 바꾼다. 새 버전을 만들고 기본으로 곧바로 발행한다 */
10224
11376
  changeTemplate: (body: ChangeStorefrontTemplateRequest) => Promise<{
@@ -10250,6 +11402,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10250
11402
  buildId: string | null;
10251
11403
  createdByType: string;
10252
11404
  createdAt: string;
11405
+ createdVia?: string | null | undefined;
10253
11406
  } | null;
10254
11407
  provisioning: {
10255
11408
  status: "PENDING" | "FAILED" | "SYNCED";
@@ -10262,6 +11415,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
10262
11415
  slugChangesRemaining: number;
10263
11416
  createdAt: string;
10264
11417
  updatedAt: string;
11418
+ suspension?: {
11419
+ reason: string | null;
11420
+ suspendedAt: string | null;
11421
+ } | null | undefined;
10265
11422
  }>;
10266
11423
  /** `GET /v1/storefront/site/versions` — 버전 목록(최신 먼저) */
10267
11424
  listVersions: () => Promise<{
@@ -10277,6 +11434,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10277
11434
  buildId: string | null;
10278
11435
  createdByType: string;
10279
11436
  createdAt: string;
11437
+ createdVia?: string | null | undefined;
10280
11438
  }[]>;
10281
11439
  /** `POST /v1/storefront/site/versions/{versionId}/publish` — 그 버전을 발행한다(이미 발행돼 있으면 그대로 200) */
10282
11440
  publish: (versionId: string, body?: PublishStorefrontVersionRequest) => Promise<{
@@ -10308,6 +11466,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10308
11466
  buildId: string | null;
10309
11467
  createdByType: string;
10310
11468
  createdAt: string;
11469
+ createdVia?: string | null | undefined;
10311
11470
  } | null;
10312
11471
  provisioning: {
10313
11472
  status: "PENDING" | "FAILED" | "SYNCED";
@@ -10320,6 +11479,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
10320
11479
  slugChangesRemaining: number;
10321
11480
  createdAt: string;
10322
11481
  updatedAt: string;
11482
+ suspension?: {
11483
+ reason: string | null;
11484
+ suspendedAt: string | null;
11485
+ } | null | undefined;
10323
11486
  }>;
10324
11487
  /** `POST /v1/storefront/site/rollback` — 이전 발행 버전으로 되돌린다(재빌드 없음) */
10325
11488
  rollback: (body?: RollbackStorefrontRequest) => Promise<{
@@ -10351,6 +11514,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10351
11514
  buildId: string | null;
10352
11515
  createdByType: string;
10353
11516
  createdAt: string;
11517
+ createdVia?: string | null | undefined;
10354
11518
  } | null;
10355
11519
  provisioning: {
10356
11520
  status: "PENDING" | "FAILED" | "SYNCED";
@@ -10363,6 +11527,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
10363
11527
  slugChangesRemaining: number;
10364
11528
  createdAt: string;
10365
11529
  updatedAt: string;
11530
+ suspension?: {
11531
+ reason: string | null;
11532
+ suspendedAt: string | null;
11533
+ } | null | undefined;
10366
11534
  }>;
10367
11535
  /** `PUT /v1/storefront/site/slug` — 슬러그를 바꾼다. 옛 슬러그는 90일 보류되고 새 주소로 301한다 */
10368
11536
  changeSlug: (body: ChangeStorefrontSlugRequest) => Promise<{
@@ -10394,6 +11562,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10394
11562
  buildId: string | null;
10395
11563
  createdByType: string;
10396
11564
  createdAt: string;
11565
+ createdVia?: string | null | undefined;
10397
11566
  } | null;
10398
11567
  provisioning: {
10399
11568
  status: "PENDING" | "FAILED" | "SYNCED";
@@ -10406,6 +11575,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
10406
11575
  slugChangesRemaining: number;
10407
11576
  createdAt: string;
10408
11577
  updatedAt: string;
11578
+ suspension?: {
11579
+ reason: string | null;
11580
+ suspendedAt: string | null;
11581
+ } | null | undefined;
10409
11582
  }>;
10410
11583
  /** `PUT /v1/storefront/site/visibility` — 오픈 준비 중 ↔ 공개 */
10411
11584
  setVisibility: (body: SetStorefrontVisibilityRequest) => Promise<{
@@ -10437,6 +11610,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10437
11610
  buildId: string | null;
10438
11611
  createdByType: string;
10439
11612
  createdAt: string;
11613
+ createdVia?: string | null | undefined;
10440
11614
  } | null;
10441
11615
  provisioning: {
10442
11616
  status: "PENDING" | "FAILED" | "SYNCED";
@@ -10449,6 +11623,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
10449
11623
  slugChangesRemaining: number;
10450
11624
  createdAt: string;
10451
11625
  updatedAt: string;
11626
+ suspension?: {
11627
+ reason: string | null;
11628
+ suspendedAt: string | null;
11629
+ } | null | undefined;
10452
11630
  }>;
10453
11631
  /**
10454
11632
  * `POST /v1/storefront/site/preview-link` — 오픈 준비 중인 사이트를 구성원이 볼 수 있는 5분짜리 링크.
@@ -10458,6 +11636,101 @@ export declare function createStoreClient(options: StoreClientOptions): {
10458
11636
  url: string;
10459
11637
  expiresAt: string;
10460
11638
  }>;
11639
+ /** `GET /v1/storefront/site/domains` — 주소 목록(기본 주소 + 내 도메인)과 DNS 안내 */
11640
+ listDomains: () => Promise<{
11641
+ enabled: boolean;
11642
+ limit: number;
11643
+ target: string;
11644
+ domains: {
11645
+ domainId: string;
11646
+ hostname: string;
11647
+ kind: "PLATFORM" | "CUSTOM";
11648
+ status: "ACTIVE" | "FAILED" | "PENDING_DNS" | "PENDING_VALIDATION";
11649
+ isPrimary: boolean;
11650
+ dnsRecords: {
11651
+ type: "CNAME" | "TXT";
11652
+ name: string;
11653
+ value: string;
11654
+ purpose: "ROUTING" | "OWNERSHIP";
11655
+ }[];
11656
+ certificateStatus: "ACTIVE" | "PENDING" | "FAILED" | null;
11657
+ failureCode: string | null;
11658
+ verifiedAt: string | null;
11659
+ activatedAt: string | null;
11660
+ checkedAt: string | null;
11661
+ createdAt: string;
11662
+ }[];
11663
+ }>;
11664
+ /**
11665
+ * `POST /v1/storefront/site/domains` (201) — 내 도메인을 추가한다. 응답의 `dnsRecords`를 DNS에 넣으면 서버가 소유를 확인하고
11666
+ * 인증서를 발급한다
11667
+ */
11668
+ addDomain: (body: AddStorefrontDomainRequest) => Promise<{
11669
+ domainId: string;
11670
+ hostname: string;
11671
+ kind: "PLATFORM" | "CUSTOM";
11672
+ status: "ACTIVE" | "FAILED" | "PENDING_DNS" | "PENDING_VALIDATION";
11673
+ isPrimary: boolean;
11674
+ dnsRecords: {
11675
+ type: "CNAME" | "TXT";
11676
+ name: string;
11677
+ value: string;
11678
+ purpose: "ROUTING" | "OWNERSHIP";
11679
+ }[];
11680
+ certificateStatus: "ACTIVE" | "PENDING" | "FAILED" | null;
11681
+ failureCode: string | null;
11682
+ verifiedAt: string | null;
11683
+ activatedAt: string | null;
11684
+ checkedAt: string | null;
11685
+ createdAt: string;
11686
+ }>;
11687
+ /** `POST /v1/storefront/site/domains/{domainId}/verify` — DNS를 곧바로 다시 확인한다(실패한 도메인은 처음부터 다시) */
11688
+ verifyDomain: (domainId: string) => Promise<{
11689
+ domainId: string;
11690
+ hostname: string;
11691
+ kind: "PLATFORM" | "CUSTOM";
11692
+ status: "ACTIVE" | "FAILED" | "PENDING_DNS" | "PENDING_VALIDATION";
11693
+ isPrimary: boolean;
11694
+ dnsRecords: {
11695
+ type: "CNAME" | "TXT";
11696
+ name: string;
11697
+ value: string;
11698
+ purpose: "ROUTING" | "OWNERSHIP";
11699
+ }[];
11700
+ certificateStatus: "ACTIVE" | "PENDING" | "FAILED" | null;
11701
+ failureCode: string | null;
11702
+ verifiedAt: string | null;
11703
+ activatedAt: string | null;
11704
+ checkedAt: string | null;
11705
+ createdAt: string;
11706
+ }>;
11707
+ /** `POST /v1/storefront/site/domains/{domainId}/primary` — 대표 주소로 지정한다. 다른 주소는 대표 주소로 301한다 */
11708
+ setPrimaryDomain: (domainId: string) => Promise<{
11709
+ enabled: boolean;
11710
+ limit: number;
11711
+ target: string;
11712
+ domains: {
11713
+ domainId: string;
11714
+ hostname: string;
11715
+ kind: "PLATFORM" | "CUSTOM";
11716
+ status: "ACTIVE" | "FAILED" | "PENDING_DNS" | "PENDING_VALIDATION";
11717
+ isPrimary: boolean;
11718
+ dnsRecords: {
11719
+ type: "CNAME" | "TXT";
11720
+ name: string;
11721
+ value: string;
11722
+ purpose: "ROUTING" | "OWNERSHIP";
11723
+ }[];
11724
+ certificateStatus: "ACTIVE" | "PENDING" | "FAILED" | null;
11725
+ failureCode: string | null;
11726
+ verifiedAt: string | null;
11727
+ activatedAt: string | null;
11728
+ checkedAt: string | null;
11729
+ createdAt: string;
11730
+ }[];
11731
+ }>;
11732
+ /** `DELETE /v1/storefront/site/domains/{domainId}` — 내 도메인 연결을 해제한다(곧바로 끊긴다) */
11733
+ removeDomain: (domainId: string) => Promise<void>;
10461
11734
  /** `POST /v1/storefront/site/disable` — 호스팅을 끈다(사이트 `CLOSED`, 슬러그 90일 보류). 다시 만들 수 있다 */
10462
11735
  disable: (body: DisableStorefrontHostingRequest) => Promise<{
10463
11736
  siteId: string;
@@ -10488,6 +11761,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10488
11761
  buildId: string | null;
10489
11762
  createdByType: string;
10490
11763
  createdAt: string;
11764
+ createdVia?: string | null | undefined;
10491
11765
  } | null;
10492
11766
  provisioning: {
10493
11767
  status: "PENDING" | "FAILED" | "SYNCED";
@@ -10500,6 +11774,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
10500
11774
  slugChangesRemaining: number;
10501
11775
  createdAt: string;
10502
11776
  updatedAt: string;
11777
+ suspension?: {
11778
+ reason: string | null;
11779
+ suspendedAt: string | null;
11780
+ } | null | undefined;
10503
11781
  }>;
10504
11782
  /** `GET /v1/storefront/site/editing` — 편집 환경 상태(열린 환경·동시 상한·미리보기 인증서) */
10505
11783
  getEditing: () => Promise<{
@@ -10721,6 +11999,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10721
11999
  buildId: string | null;
10722
12000
  createdByType: string;
10723
12001
  createdAt: string;
12002
+ createdVia?: string | null | undefined;
10724
12003
  };
10725
12004
  build: {
10726
12005
  buildId: string;
@@ -10771,6 +12050,33 @@ export declare function createStoreClient(options: StoreClientOptions): {
10771
12050
  startedAt: string | null;
10772
12051
  finishedAt: string | null;
10773
12052
  durationMs: number | null;
12053
+ dependencies?: {
12054
+ checkedPackages: number;
12055
+ rejected: {
12056
+ name: string;
12057
+ version: string | null;
12058
+ reason: string;
12059
+ detail: string;
12060
+ advisory?: {
12061
+ id: string;
12062
+ url: string | null;
12063
+ severity: string;
12064
+ title: string;
12065
+ } | null | undefined;
12066
+ }[];
12067
+ warnings: {
12068
+ name: string;
12069
+ version: string | null;
12070
+ reason: string;
12071
+ detail: string;
12072
+ advisory?: {
12073
+ id: string;
12074
+ url: string | null;
12075
+ severity: string;
12076
+ title: string;
12077
+ } | null | undefined;
12078
+ }[];
12079
+ } | null | undefined;
10774
12080
  };
10775
12081
  }>;
10776
12082
  /** `GET /v1/storefront/site/builds?limit=` — 빌드 목록(최신 먼저) */
@@ -10825,6 +12131,33 @@ export declare function createStoreClient(options: StoreClientOptions): {
10825
12131
  startedAt: string | null;
10826
12132
  finishedAt: string | null;
10827
12133
  durationMs: number | null;
12134
+ dependencies?: {
12135
+ checkedPackages: number;
12136
+ rejected: {
12137
+ name: string;
12138
+ version: string | null;
12139
+ reason: string;
12140
+ detail: string;
12141
+ advisory?: {
12142
+ id: string;
12143
+ url: string | null;
12144
+ severity: string;
12145
+ title: string;
12146
+ } | null | undefined;
12147
+ }[];
12148
+ warnings: {
12149
+ name: string;
12150
+ version: string | null;
12151
+ reason: string;
12152
+ detail: string;
12153
+ advisory?: {
12154
+ id: string;
12155
+ url: string | null;
12156
+ severity: string;
12157
+ title: string;
12158
+ } | null | undefined;
12159
+ }[];
12160
+ } | null | undefined;
10828
12161
  }[]>;
10829
12162
  /** `GET /v1/storefront/site/builds/{buildId}` — 빌드 상태·실패 단계·로그 꼬리·규칙 결과 */
10830
12163
  getBuild: (buildId: string) => Promise<{
@@ -10876,6 +12209,94 @@ export declare function createStoreClient(options: StoreClientOptions): {
10876
12209
  startedAt: string | null;
10877
12210
  finishedAt: string | null;
10878
12211
  durationMs: number | null;
12212
+ dependencies?: {
12213
+ checkedPackages: number;
12214
+ rejected: {
12215
+ name: string;
12216
+ version: string | null;
12217
+ reason: string;
12218
+ detail: string;
12219
+ advisory?: {
12220
+ id: string;
12221
+ url: string | null;
12222
+ severity: string;
12223
+ title: string;
12224
+ } | null | undefined;
12225
+ }[];
12226
+ warnings: {
12227
+ name: string;
12228
+ version: string | null;
12229
+ reason: string;
12230
+ detail: string;
12231
+ advisory?: {
12232
+ id: string;
12233
+ url: string | null;
12234
+ severity: string;
12235
+ title: string;
12236
+ } | null | undefined;
12237
+ }[];
12238
+ } | null | undefined;
12239
+ }>;
12240
+ /** `GET /v1/storefront/site/source` — 지금 작업 트리를 고정하고 압축 파일(tar.gz) 크기·조각 수를 알린다 */
12241
+ getSource: () => Promise<{
12242
+ siteId: string;
12243
+ storeId: string;
12244
+ storeCode: string;
12245
+ sourceRef: string;
12246
+ treeSha256: string;
12247
+ files: number;
12248
+ bytes: number;
12249
+ archive: {
12250
+ format: "tar+gzip";
12251
+ bytes: number;
12252
+ sha256: string;
12253
+ parts: number;
12254
+ partBytes: number;
12255
+ };
12256
+ editSessionOpen: boolean;
12257
+ }>;
12258
+ /** `GET /v1/storefront/site/source/archive?sourceRef=&part=` — 압축 파일 조각(base64, 4MiB까지) */
12259
+ getSourceArchive: (params: {
12260
+ sourceRef: string;
12261
+ part?: number;
12262
+ }) => Promise<{
12263
+ sourceRef: string;
12264
+ part: number;
12265
+ parts: number;
12266
+ offset: number;
12267
+ bytes: number;
12268
+ totalBytes: number;
12269
+ content: string;
12270
+ }>;
12271
+ /** `POST /v1/storefront/site/source/blobs` — 파일 내용 올리기(해시 키). 작업 트리는 바뀌지 않는다 */
12272
+ uploadSourceBlobs: (body: UploadStorefrontSourceBlobsRequest) => Promise<{
12273
+ stored: number;
12274
+ existing: number;
12275
+ }>;
12276
+ /**
12277
+ * `PUT /v1/storefront/site/source` — 작업 트리 전체를 바꾼다. 409 `SOURCE_CHANGED`(내려받은 뒤 바뀜)·`EDIT_SESSION_OPEN`·
12278
+ * `SOURCE_BLOBS_MISSING`(`details.hashes`를 올리고 다시)
12279
+ */
12280
+ replaceSource: (body: ReplaceStorefrontSourceRequest) => Promise<{
12281
+ sourceRef: string;
12282
+ previousRef: string;
12283
+ treeSha256: string;
12284
+ files: number;
12285
+ bytes: number;
12286
+ changed: boolean;
12287
+ endedEditSession: boolean;
12288
+ dependencyWarnings: {
12289
+ name: string;
12290
+ version: string | null;
12291
+ reason: string;
12292
+ detail: string;
12293
+ advisory?: {
12294
+ id: string;
12295
+ url: string | null;
12296
+ severity: string;
12297
+ title: string;
12298
+ } | null | undefined;
12299
+ }[];
10879
12300
  }>;
10880
12301
  };
10881
12302
  store: {
@@ -11172,6 +12593,7 @@ export declare const couponRejectReasonSchema: z.ZodEnum<{
11172
12593
  NO_ELIGIBLE_ITEMS: "NO_ELIGIBLE_ITEMS";
11173
12594
  MIN_ORDER_AMOUNT: "MIN_ORDER_AMOUNT";
11174
12595
  LINE_NOT_ELIGIBLE: "LINE_NOT_ELIGIBLE";
12596
+ LINE_AMBIGUOUS: "LINE_AMBIGUOUS";
11175
12597
  NO_DISCOUNT: "NO_DISCOUNT";
11176
12598
  }>;
11177
12599
  export type CouponRejectReason = z.infer<typeof couponRejectReasonSchema>;
@@ -11841,6 +13263,19 @@ export declare const orderWebhookEventDataSchema: z.ZodObject<{
11841
13263
  [x: string]: unknown;
11842
13264
  type: string;
11843
13265
  }>>]>>;
13266
+ itemOptions: z.ZodOptional<z.ZodArray<z.ZodObject<{
13267
+ orderItemId: z.ZodString;
13268
+ optionSelections: z.ZodArray<z.ZodObject<{
13269
+ kind: z.ZodString;
13270
+ groupName: z.ZodString;
13271
+ valueName: z.ZodString;
13272
+ additionalPrice: z.ZodNumber;
13273
+ }, z.core.$strip>>;
13274
+ customInputs: z.ZodArray<z.ZodObject<{
13275
+ label: z.ZodString;
13276
+ value: z.ZodString;
13277
+ }, z.core.$strip>>;
13278
+ }, z.core.$strip>>>;
11844
13279
  }, z.core.$strip>;
11845
13280
  export type OrderWebhookEventData = z.infer<typeof orderWebhookEventDataSchema>;
11846
13281
  /**
@@ -12004,6 +13439,19 @@ export declare const orderWebhookEventSchema: z.ZodObject<{
12004
13439
  [x: string]: unknown;
12005
13440
  type: string;
12006
13441
  }>>]>>;
13442
+ itemOptions: z.ZodOptional<z.ZodArray<z.ZodObject<{
13443
+ orderItemId: z.ZodString;
13444
+ optionSelections: z.ZodArray<z.ZodObject<{
13445
+ kind: z.ZodString;
13446
+ groupName: z.ZodString;
13447
+ valueName: z.ZodString;
13448
+ additionalPrice: z.ZodNumber;
13449
+ }, z.core.$strip>>;
13450
+ customInputs: z.ZodArray<z.ZodObject<{
13451
+ label: z.ZodString;
13452
+ value: z.ZodString;
13453
+ }, z.core.$strip>>;
13454
+ }, z.core.$strip>>>;
12007
13455
  }, z.core.$strip>;
12008
13456
  id: z.ZodString;
12009
13457
  createdAt: z.ZodString;
@@ -12204,6 +13652,19 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
12204
13652
  [x: string]: unknown;
12205
13653
  type: string;
12206
13654
  }>>]>>;
13655
+ itemOptions: z.ZodOptional<z.ZodArray<z.ZodObject<{
13656
+ orderItemId: z.ZodString;
13657
+ optionSelections: z.ZodArray<z.ZodObject<{
13658
+ kind: z.ZodString;
13659
+ groupName: z.ZodString;
13660
+ valueName: z.ZodString;
13661
+ additionalPrice: z.ZodNumber;
13662
+ }, z.core.$strip>>;
13663
+ customInputs: z.ZodArray<z.ZodObject<{
13664
+ label: z.ZodString;
13665
+ value: z.ZodString;
13666
+ }, z.core.$strip>>;
13667
+ }, z.core.$strip>>>;
12207
13668
  }, z.core.$strip>;
12208
13669
  id: z.ZodString;
12209
13670
  createdAt: z.ZodString;