@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.d.mts CHANGED
@@ -166,8 +166,8 @@ export declare const auditLogPageSchema: z.ZodObject<{
166
166
  export type AuditLogPage = z.infer<typeof auditLogPageSchema>;
167
167
  export declare const agentPolicyDecisionSchema: z.ZodEnum<{
168
168
  DENIED: "DENIED";
169
- ALLOW: "ALLOW";
170
169
  APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
170
+ ALLOW: "ALLOW";
171
171
  }>;
172
172
  export type AgentPolicyDecision = z.infer<typeof agentPolicyDecisionSchema>;
173
173
  export declare const writePreviewSchema: z.ZodObject<{
@@ -191,8 +191,8 @@ export declare const writeDryRunResultSchema: z.ZodObject<{
191
191
  dryRun: z.ZodLiteral<true>;
192
192
  decision: z.ZodEnum<{
193
193
  DENIED: "DENIED";
194
- ALLOW: "ALLOW";
195
194
  APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
195
+ ALLOW: "ALLOW";
196
196
  }>;
197
197
  reason: z.ZodNullable<z.ZodString>;
198
198
  preview: z.ZodObject<{
@@ -2007,6 +2007,397 @@ export declare const collectionPreviewSchema: z.ZodObject<{
2007
2007
  }, z.core.$strip>;
2008
2008
  export type CollectionPreview = z.infer<typeof collectionPreviewSchema>;
2009
2009
  //#endregion
2010
+ //#region src/schemas/commerce-flow.d.ts
2011
+ /**
2012
+ * 커머스 플로우(이슈 #115) — 주문상품이 따르는 플로우의 지금 상태와 할 수 있는 행동. 공개 계약은 필드 추가로만 자란다.
2013
+ * 행동 키·필드 키·꺼진 이유는 상점·앱이 늘리는 **열린 문자열**이다(모르는 값도 파싱한다). 공개 상태(`coreStatus`)만 닫힌 8개 값이다.
2014
+ * 화면은 이 값만 그리고 상태 이름으로 분기하지 않는다 — 판정은 서버가 한다.
2015
+ */
2016
+ export declare const flowInputFieldSchema: z.ZodObject<{
2017
+ key: z.ZodString;
2018
+ type: z.ZodString;
2019
+ required: z.ZodBoolean;
2020
+ label: z.ZodString;
2021
+ maxLength: z.ZodOptional<z.ZodNumber>;
2022
+ maxFiles: z.ZodOptional<z.ZodNumber>;
2023
+ options: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
2024
+ }, z.core.$strip>;
2025
+ export type FlowInputField = z.infer<typeof flowInputFieldSchema>;
2026
+ export declare const flowActionSchema: z.ZodObject<{
2027
+ key: z.ZodString;
2028
+ label: z.ZodString;
2029
+ mode: z.ZodEnum<{
2030
+ REQUEST: "REQUEST";
2031
+ INSTANT: "INSTANT";
2032
+ VIEW: "VIEW";
2033
+ }>;
2034
+ enabled: z.ZodBoolean;
2035
+ disabled: z.ZodOptional<z.ZodObject<{
2036
+ reason: z.ZodString;
2037
+ message: z.ZodOptional<z.ZodString>;
2038
+ }, z.core.$strip>>;
2039
+ availableUntil: z.ZodOptional<z.ZodString>;
2040
+ subflow: z.ZodOptional<z.ZodString>;
2041
+ input: z.ZodOptional<z.ZodArray<z.ZodObject<{
2042
+ key: z.ZodString;
2043
+ type: z.ZodString;
2044
+ required: z.ZodBoolean;
2045
+ label: z.ZodString;
2046
+ maxLength: z.ZodOptional<z.ZodNumber>;
2047
+ maxFiles: z.ZodOptional<z.ZodNumber>;
2048
+ options: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
2049
+ }, z.core.$strip>>>;
2050
+ partialQuantity: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"UNIT">]>>;
2051
+ }, z.core.$strip>;
2052
+ export type FlowAction = z.infer<typeof flowActionSchema>;
2053
+ /** 커스텀 필드 값 — 문자열(날짜·일시는 ISO 8601)·숫자·참거짓·null, 수량 단위 필드는 문자열 배열 */
2054
+ export declare const flowFieldValueSchema: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodString>]>;
2055
+ export type FlowFieldValue = z.infer<typeof flowFieldValueSchema>;
2056
+ export declare const flowStateSchema: z.ZodObject<{
2057
+ key: z.ZodString;
2058
+ label: z.ZodString;
2059
+ coreStatus: z.ZodOptional<z.ZodEnum<{
2060
+ PAID: "PAID";
2061
+ CANCELED: "CANCELED";
2062
+ PAYMENT_WAITING: "PAYMENT_WAITING";
2063
+ CONFIRMED: "CONFIRMED";
2064
+ DISPATCHED: "DISPATCHED";
2065
+ DELIVERING: "DELIVERING";
2066
+ DELIVERED: "DELIVERED";
2067
+ PURCHASE_DECIDED: "PURCHASE_DECIDED";
2068
+ }>>;
2069
+ claimStatus: z.ZodOptional<z.ZodEnum<{
2070
+ REJECTED: "REJECTED";
2071
+ REQUESTED: "REQUESTED";
2072
+ HELD: "HELD";
2073
+ COLLECTING: "COLLECTING";
2074
+ COLLECTED: "COLLECTED";
2075
+ REDELIVERING: "REDELIVERING";
2076
+ APPROVED: "APPROVED";
2077
+ COMPLETED: "COMPLETED";
2078
+ WITHDRAWN: "WITHDRAWN";
2079
+ }>>;
2080
+ message: z.ZodOptional<z.ZodString>;
2081
+ enteredAt: z.ZodString;
2082
+ deadlineAt: z.ZodOptional<z.ZodString>;
2083
+ attachments: z.ZodOptional<z.ZodArray<z.ZodString>>;
2084
+ progress: z.ZodOptional<z.ZodBoolean>;
2085
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodString>]>>;
2086
+ }, z.core.$strip>;
2087
+ export type FlowState = z.infer<typeof flowStateSchema>;
2088
+ export declare const orderItemFlowSchema: z.ZodObject<{
2089
+ orderItemId: z.ZodString;
2090
+ flow: z.ZodObject<{
2091
+ flowId: z.ZodString;
2092
+ version: z.ZodNumber;
2093
+ }, z.core.$strip>;
2094
+ flowState: z.ZodObject<{
2095
+ key: z.ZodString;
2096
+ label: z.ZodString;
2097
+ coreStatus: z.ZodOptional<z.ZodEnum<{
2098
+ PAID: "PAID";
2099
+ CANCELED: "CANCELED";
2100
+ PAYMENT_WAITING: "PAYMENT_WAITING";
2101
+ CONFIRMED: "CONFIRMED";
2102
+ DISPATCHED: "DISPATCHED";
2103
+ DELIVERING: "DELIVERING";
2104
+ DELIVERED: "DELIVERED";
2105
+ PURCHASE_DECIDED: "PURCHASE_DECIDED";
2106
+ }>>;
2107
+ claimStatus: z.ZodOptional<z.ZodEnum<{
2108
+ REJECTED: "REJECTED";
2109
+ REQUESTED: "REQUESTED";
2110
+ HELD: "HELD";
2111
+ COLLECTING: "COLLECTING";
2112
+ COLLECTED: "COLLECTED";
2113
+ REDELIVERING: "REDELIVERING";
2114
+ APPROVED: "APPROVED";
2115
+ COMPLETED: "COMPLETED";
2116
+ WITHDRAWN: "WITHDRAWN";
2117
+ }>>;
2118
+ message: z.ZodOptional<z.ZodString>;
2119
+ enteredAt: z.ZodString;
2120
+ deadlineAt: z.ZodOptional<z.ZodString>;
2121
+ attachments: z.ZodOptional<z.ZodArray<z.ZodString>>;
2122
+ progress: z.ZodOptional<z.ZodBoolean>;
2123
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodString>]>>;
2124
+ }, z.core.$strip>;
2125
+ actions: z.ZodArray<z.ZodObject<{
2126
+ key: z.ZodString;
2127
+ label: z.ZodString;
2128
+ mode: z.ZodEnum<{
2129
+ REQUEST: "REQUEST";
2130
+ INSTANT: "INSTANT";
2131
+ VIEW: "VIEW";
2132
+ }>;
2133
+ enabled: z.ZodBoolean;
2134
+ disabled: z.ZodOptional<z.ZodObject<{
2135
+ reason: z.ZodString;
2136
+ message: z.ZodOptional<z.ZodString>;
2137
+ }, z.core.$strip>>;
2138
+ availableUntil: z.ZodOptional<z.ZodString>;
2139
+ subflow: z.ZodOptional<z.ZodString>;
2140
+ input: z.ZodOptional<z.ZodArray<z.ZodObject<{
2141
+ key: z.ZodString;
2142
+ type: z.ZodString;
2143
+ required: z.ZodBoolean;
2144
+ label: z.ZodString;
2145
+ maxLength: z.ZodOptional<z.ZodNumber>;
2146
+ maxFiles: z.ZodOptional<z.ZodNumber>;
2147
+ options: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
2148
+ }, z.core.$strip>>>;
2149
+ partialQuantity: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"UNIT">]>>;
2150
+ }, z.core.$strip>>;
2151
+ timers: z.ZodArray<z.ZodObject<{
2152
+ key: z.ZodString;
2153
+ dueAt: z.ZodString;
2154
+ paused: z.ZodBoolean;
2155
+ }, z.core.$strip>>;
2156
+ ended: z.ZodBoolean;
2157
+ }, z.core.$strip>;
2158
+ export type OrderItemFlow = z.infer<typeof orderItemFlowSchema>;
2159
+ export declare const flowActionRequestSchema: z.ZodObject<{
2160
+ input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2161
+ }, z.core.$strip>;
2162
+ export type FlowActionRequest = z.infer<typeof flowActionRequestSchema>;
2163
+ /**
2164
+ * 행동 실행 결과. 지금은 동기 완료(COMPLETED)뿐이다. 외부 호출이 든 전이는 202와 함께 ACCEPTED(runId)가 온다(HTTP·앱 노드 단계에서 더한다).
2165
+ * 동기 거절은 409(ACTION_NOT_AVAILABLE)다.
2166
+ */
2167
+ export declare const flowActionResultSchema: z.ZodObject<{
2168
+ status: z.ZodLiteral<"COMPLETED">;
2169
+ flowState: z.ZodObject<{
2170
+ key: z.ZodString;
2171
+ label: z.ZodString;
2172
+ coreStatus: z.ZodOptional<z.ZodEnum<{
2173
+ PAID: "PAID";
2174
+ CANCELED: "CANCELED";
2175
+ PAYMENT_WAITING: "PAYMENT_WAITING";
2176
+ CONFIRMED: "CONFIRMED";
2177
+ DISPATCHED: "DISPATCHED";
2178
+ DELIVERING: "DELIVERING";
2179
+ DELIVERED: "DELIVERED";
2180
+ PURCHASE_DECIDED: "PURCHASE_DECIDED";
2181
+ }>>;
2182
+ claimStatus: z.ZodOptional<z.ZodEnum<{
2183
+ REJECTED: "REJECTED";
2184
+ REQUESTED: "REQUESTED";
2185
+ HELD: "HELD";
2186
+ COLLECTING: "COLLECTING";
2187
+ COLLECTED: "COLLECTED";
2188
+ REDELIVERING: "REDELIVERING";
2189
+ APPROVED: "APPROVED";
2190
+ COMPLETED: "COMPLETED";
2191
+ WITHDRAWN: "WITHDRAWN";
2192
+ }>>;
2193
+ message: z.ZodOptional<z.ZodString>;
2194
+ enteredAt: z.ZodString;
2195
+ deadlineAt: z.ZodOptional<z.ZodString>;
2196
+ attachments: z.ZodOptional<z.ZodArray<z.ZodString>>;
2197
+ progress: z.ZodOptional<z.ZodBoolean>;
2198
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodString>]>>;
2199
+ }, z.core.$strip>;
2200
+ actions: z.ZodArray<z.ZodObject<{
2201
+ key: z.ZodString;
2202
+ label: z.ZodString;
2203
+ mode: z.ZodEnum<{
2204
+ REQUEST: "REQUEST";
2205
+ INSTANT: "INSTANT";
2206
+ VIEW: "VIEW";
2207
+ }>;
2208
+ enabled: z.ZodBoolean;
2209
+ disabled: z.ZodOptional<z.ZodObject<{
2210
+ reason: z.ZodString;
2211
+ message: z.ZodOptional<z.ZodString>;
2212
+ }, z.core.$strip>>;
2213
+ availableUntil: z.ZodOptional<z.ZodString>;
2214
+ subflow: z.ZodOptional<z.ZodString>;
2215
+ input: z.ZodOptional<z.ZodArray<z.ZodObject<{
2216
+ key: z.ZodString;
2217
+ type: z.ZodString;
2218
+ required: z.ZodBoolean;
2219
+ label: z.ZodString;
2220
+ maxLength: z.ZodOptional<z.ZodNumber>;
2221
+ maxFiles: z.ZodOptional<z.ZodNumber>;
2222
+ options: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
2223
+ }, z.core.$strip>>>;
2224
+ partialQuantity: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"UNIT">]>>;
2225
+ }, z.core.$strip>>;
2226
+ affectedOrderItemIds: z.ZodArray<z.ZodString>;
2227
+ }, z.core.$strip>;
2228
+ export type FlowActionResult = z.infer<typeof flowActionResultSchema>;
2229
+ export declare const flowPresetSummarySchema: z.ZodObject<{
2230
+ key: z.ZodString;
2231
+ presetVersion: z.ZodNumber;
2232
+ name: z.ZodString;
2233
+ description: z.ZodString;
2234
+ availability: z.ZodEnum<{
2235
+ AVAILABLE: "AVAILABLE";
2236
+ BLOCKED: "BLOCKED";
2237
+ }>;
2238
+ dependsOn: z.ZodArray<z.ZodString>;
2239
+ requires: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2240
+ variables: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2241
+ }, z.core.$strip>;
2242
+ export type FlowPresetSummary = z.infer<typeof flowPresetSummarySchema>;
2243
+ export declare const commerceFlowSummarySchema: z.ZodObject<{
2244
+ flowId: z.ZodString;
2245
+ key: z.ZodString;
2246
+ name: z.ZodString;
2247
+ progression: z.ZodEnum<{
2248
+ ITEM: "ITEM";
2249
+ ORDER_GROUP: "ORDER_GROUP";
2250
+ }>;
2251
+ fulfillmentMethods: z.ZodArray<z.ZodString>;
2252
+ presetKey: z.ZodNullable<z.ZodString>;
2253
+ presetVersion: z.ZodNullable<z.ZodNumber>;
2254
+ activeVersion: z.ZodNullable<z.ZodNumber>;
2255
+ archivedAt: z.ZodNullable<z.ZodString>;
2256
+ createdAt: z.ZodString;
2257
+ updatedAt: z.ZodString;
2258
+ }, z.core.$strip>;
2259
+ export type CommerceFlowSummary = z.infer<typeof commerceFlowSummarySchema>;
2260
+ export declare const commerceFlowVersionViewSchema: z.ZodObject<{
2261
+ version: z.ZodNumber;
2262
+ status: z.ZodEnum<{
2263
+ ACTIVE: "ACTIVE";
2264
+ DRAFT: "DRAFT";
2265
+ LEGACY: "LEGACY";
2266
+ }>;
2267
+ revision: z.ZodNumber;
2268
+ graph: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2269
+ definition: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2270
+ variables: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2271
+ publishedAt: z.ZodNullable<z.ZodString>;
2272
+ }, z.core.$strip>;
2273
+ export declare const commerceFlowSchema: z.ZodObject<{
2274
+ flowId: z.ZodString;
2275
+ key: z.ZodString;
2276
+ name: z.ZodString;
2277
+ progression: z.ZodEnum<{
2278
+ ITEM: "ITEM";
2279
+ ORDER_GROUP: "ORDER_GROUP";
2280
+ }>;
2281
+ fulfillmentMethods: z.ZodArray<z.ZodString>;
2282
+ presetKey: z.ZodNullable<z.ZodString>;
2283
+ presetVersion: z.ZodNullable<z.ZodNumber>;
2284
+ activeVersion: z.ZodNullable<z.ZodNumber>;
2285
+ archivedAt: z.ZodNullable<z.ZodString>;
2286
+ createdAt: z.ZodString;
2287
+ updatedAt: z.ZodString;
2288
+ draft: z.ZodNullable<z.ZodObject<{
2289
+ version: z.ZodNumber;
2290
+ status: z.ZodEnum<{
2291
+ ACTIVE: "ACTIVE";
2292
+ DRAFT: "DRAFT";
2293
+ LEGACY: "LEGACY";
2294
+ }>;
2295
+ revision: z.ZodNumber;
2296
+ graph: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2297
+ definition: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2298
+ variables: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2299
+ publishedAt: z.ZodNullable<z.ZodString>;
2300
+ }, z.core.$strip>>;
2301
+ active: z.ZodNullable<z.ZodObject<{
2302
+ version: z.ZodNumber;
2303
+ status: z.ZodEnum<{
2304
+ ACTIVE: "ACTIVE";
2305
+ DRAFT: "DRAFT";
2306
+ LEGACY: "LEGACY";
2307
+ }>;
2308
+ revision: z.ZodNumber;
2309
+ graph: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2310
+ definition: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2311
+ variables: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2312
+ publishedAt: z.ZodNullable<z.ZodString>;
2313
+ }, z.core.$strip>>;
2314
+ versions: z.ZodArray<z.ZodObject<{
2315
+ version: z.ZodNumber;
2316
+ status: z.ZodEnum<{
2317
+ ACTIVE: "ACTIVE";
2318
+ DRAFT: "DRAFT";
2319
+ LEGACY: "LEGACY";
2320
+ }>;
2321
+ publishedAt: z.ZodNullable<z.ZodString>;
2322
+ }, z.core.$strip>>;
2323
+ }, z.core.$strip>;
2324
+ export type CommerceFlow = z.infer<typeof commerceFlowSchema>;
2325
+ export declare const createCommerceFlowRequestSchema: z.ZodObject<{
2326
+ key: z.ZodString;
2327
+ name: z.ZodOptional<z.ZodString>;
2328
+ presetKey: z.ZodOptional<z.ZodString>;
2329
+ variables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2330
+ }, z.core.$strip>;
2331
+ export type CreateCommerceFlowRequest = z.infer<typeof createCommerceFlowRequestSchema>;
2332
+ export declare const saveFlowDraftRequestSchema: z.ZodObject<{
2333
+ graph: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2334
+ definition: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2335
+ variables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2336
+ }, z.core.$strip>;
2337
+ export type SaveFlowDraftRequest = z.infer<typeof saveFlowDraftRequestSchema>;
2338
+ export declare const commerceFlowCheckSchema: z.ZodObject<{
2339
+ publishable: z.ZodBoolean;
2340
+ blocking: z.ZodArray<z.ZodObject<{
2341
+ code: z.ZodString;
2342
+ message: z.ZodString;
2343
+ nodeId: z.ZodOptional<z.ZodString>;
2344
+ edgeId: z.ZodOptional<z.ZodString>;
2345
+ }, z.core.$strip>>;
2346
+ warnings: z.ZodArray<z.ZodObject<{
2347
+ code: z.ZodString;
2348
+ message: z.ZodString;
2349
+ nodeId: z.ZodOptional<z.ZodString>;
2350
+ edgeId: z.ZodOptional<z.ZodString>;
2351
+ }, z.core.$strip>>;
2352
+ }, z.core.$strip>;
2353
+ export type CommerceFlowCheck = z.infer<typeof commerceFlowCheckSchema>;
2354
+ export declare const flowAssignmentRuleSchema: z.ZodObject<{
2355
+ ruleId: z.ZodString;
2356
+ priority: z.ZodNumber;
2357
+ condition: z.ZodString;
2358
+ flowId: z.ZodString;
2359
+ }, z.core.$strip>;
2360
+ export type FlowAssignmentRule = z.infer<typeof flowAssignmentRuleSchema>;
2361
+ export declare const saveFlowAssignmentRulesRequestSchema: z.ZodObject<{
2362
+ rules: z.ZodArray<z.ZodObject<{
2363
+ condition: z.ZodString;
2364
+ flowId: z.ZodString;
2365
+ }, z.core.$strip>>;
2366
+ }, z.core.$strip>;
2367
+ export type SaveFlowAssignmentRulesRequest = z.infer<typeof saveFlowAssignmentRulesRequestSchema>;
2368
+ export declare const resolvedFlowSchema: z.ZodObject<{
2369
+ flowId: z.ZodString;
2370
+ version: z.ZodNumber;
2371
+ source: z.ZodEnum<{
2372
+ RULE: "RULE";
2373
+ PLATFORM: "PLATFORM";
2374
+ }>;
2375
+ ruleId: z.ZodOptional<z.ZodString>;
2376
+ }, z.core.$strip>;
2377
+ export type ResolvedFlow = z.infer<typeof resolvedFlowSchema>;
2378
+ export declare const testFlowAssignmentRequestSchema: z.ZodObject<{
2379
+ productId: z.ZodString;
2380
+ orderAmount: z.ZodOptional<z.ZodNumber>;
2381
+ paymentMethod: z.ZodOptional<z.ZodString>;
2382
+ member: z.ZodOptional<z.ZodBoolean>;
2383
+ }, z.core.$strip>;
2384
+ export type TestFlowAssignmentRequest = z.infer<typeof testFlowAssignmentRequestSchema>;
2385
+ /** 시크릿 이름 — 플로우 변수 `secretRef`의 값이다 */
2386
+ export declare const flowSecretNameSchema: z.ZodString;
2387
+ /** HTTP 노드가 부를 셀러 API — 헤더 값은 응답에 싣지 않는다 */
2388
+ export declare const flowSecretSchema: z.ZodObject<{
2389
+ name: z.ZodString;
2390
+ url: z.ZodString;
2391
+ headerNames: z.ZodArray<z.ZodString>;
2392
+ updatedAt: z.ZodString;
2393
+ }, z.core.$strip>;
2394
+ export type FlowSecret = z.infer<typeof flowSecretSchema>;
2395
+ export declare const saveFlowSecretRequestSchema: z.ZodObject<{
2396
+ url: z.ZodURL;
2397
+ headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
2398
+ }, z.core.$strip>;
2399
+ export type SaveFlowSecretRequest = z.input<typeof saveFlowSecretRequestSchema>;
2400
+ //#endregion
2010
2401
  //#region src/schemas/coupon.d.ts
2011
2402
  /**
2012
2403
  * 쿠폰 관리 API 계약 (이슈 #47) — `/v1/coupons/**`, 스코프 `promotion:r|rw`.
@@ -2622,7 +3013,341 @@ export declare const customerWithdrawalBlockedDetailsSchema: z.ZodObject<{
2622
3013
  openClaims: z.ZodNumber;
2623
3014
  pendingPayments: z.ZodNumber;
2624
3015
  }, z.core.$strip>;
2625
- export type CustomerWithdrawalBlockedDetails = z.infer<typeof customerWithdrawalBlockedDetailsSchema>;
3016
+ export type CustomerWithdrawalBlockedDetails = z.infer<typeof customerWithdrawalBlockedDetailsSchema>;
3017
+ //#endregion
3018
+ //#region src/schemas/fulfillment.d.ts
3019
+ /**
3020
+ * 상품 유형 (이슈 #48·#57) — 배송이 필요한 상품과 필요 없는 상품을 가르는 축이다.
3021
+ *
3022
+ * **상품 유형은 이행 방식 하나로 표현한다.** `fulfillment.type`이 배송 필요 여부, 이행 흐름, 클레임 규칙을 정한다.
3023
+ * 코드 곳곳에서 유형 이름으로 분기하지 않고 이 파일의 판정 함수(`requiresShipping`·`fulfillmentRuleOf`)를 지난다.
3024
+ *
3025
+ * 주문상품 상태 enum은 바꾸지 않는다. 비실물의 **제공 완료는 `DELIVERED`를 재사용한다** — 새 상태를 더하면 기존 소비자의
3026
+ * 상태 분기(배송완료 뒤 구매확정 대기, 반품 가능 판정)가 새 값을 모른다. 표시는 유형으로 가른다.
3027
+ */
3028
+ /**
3029
+ * 상품 유형.
3030
+ * - `SHIPPING` 배송 상품. 택배로 발송하고 송장·배송 추적으로 배송완료가 된다
3031
+ * - `MANUAL` 배송 없는 상품(비실물). 셀러가 제공 처리(`POST /v1/order-items/{orderItemId}/fulfill`)로 제공 완료를 기록한다
3032
+ *
3033
+ * 비실물의 세부 구분(파일 다운로드·코드 발급·이용권·방문 수령)은 2026-09-28에 제품에서 뺐다(이슈 #48 범위 축소).
3034
+ * 이름은 이행 방식이다 — `SHIPPING`이 택배 발송이듯 `MANUAL`은 셀러가 직접 제공한다는 뜻이다.
3035
+ */
3036
+ export declare const fulfillmentTypeSchema: z.ZodEnum<{
3037
+ SHIPPING: "SHIPPING";
3038
+ MANUAL: "MANUAL";
3039
+ }>;
3040
+ export type FulfillmentType = z.infer<typeof fulfillmentTypeSchema>;
3041
+ /**
3042
+ * 응답 스키마용 유형 — 서버가 나중에 유형을 더해도 옛 SDK가 응답 파싱에서 깨지지 않게 문자열로 받는다.
3043
+ * 요청은 `fulfillmentTypeSchema`(닫힌 enum)로 검증한다.
3044
+ */
3045
+ export declare const fulfillmentTypeResponseSchema: z.ZodString;
3046
+ /** 유형 하나의 규칙 — 배송·클레임이 이 표를 읽는다 */
3047
+ export interface FulfillmentRule {
3048
+ /** 택배 배송이 필요한가 — 배송비·배송지·발송 흐름의 대상인가 */
3049
+ requiresShipping: boolean;
3050
+ /** 반품에 수거가 필요한가 — 실물만 수거한다 */
3051
+ requiresCollection: boolean;
3052
+ /** 교환을 받는가 — 실물만 받는다 */
3053
+ exchangeSupported: boolean;
3054
+ }
3055
+ /** 유형별 규칙표 — **유일한 원천이다.** */
3056
+ export declare const FULFILLMENT_RULES: Readonly<Record<FulfillmentType, FulfillmentRule>>;
3057
+ /**
3058
+ * 저장된 값 → 유형. null·모르는 값은 `SHIPPING`이다 — 이 필드 이전의 상품·주문상품은 모두 배송 상품이었다.
3059
+ */
3060
+ export declare function fulfillmentTypeOf(value: string | null | undefined): FulfillmentType;
3061
+ /** 유형의 규칙 — 모르는 값은 배송 상품 규칙이다 */
3062
+ export declare function fulfillmentRuleOf(type: string | null | undefined): FulfillmentRule;
3063
+ /**
3064
+ * 이행 방식.
3065
+ * - `CARRIER` 택배(송장·배송 추적)
3066
+ * - `DIRECT` 직접 배달(배송지 있음, 송장 없음)
3067
+ * - `PICKUP` 방문 수령(배송지·배송비 없음)
3068
+ * - `PROVIDED` 제공 처리(배송 없는 상품)
3069
+ */
3070
+ export declare const FULFILLMENT_METHODS: readonly ["CARRIER", "DIRECT", "PICKUP", "PROVIDED"];
3071
+ export declare const fulfillmentMethodSchema: z.ZodEnum<{
3072
+ CARRIER: "CARRIER";
3073
+ DIRECT: "DIRECT";
3074
+ PICKUP: "PICKUP";
3075
+ PROVIDED: "PROVIDED";
3076
+ }>;
3077
+ export type FulfillmentMethod = z.infer<typeof fulfillmentMethodSchema>;
3078
+ /** 방식 하나의 규칙 */
3079
+ export interface FulfillmentMethodRule {
3080
+ /** 배송지를 받는가 — 배송비 묶음·배송지 필수 판정의 대상인가 */
3081
+ requiresAddress: boolean;
3082
+ /** 송장 등록·배송 추적으로 배송완료가 되는가 */
3083
+ carrierTracking: boolean;
3084
+ /** 구매자가 픽업 장소를 고르는가 */
3085
+ pickupLocation: boolean;
3086
+ }
3087
+ /** 방식별 규칙표 — **유일한 원천이다.** */
3088
+ export declare const FULFILLMENT_METHOD_RULES: Readonly<Record<FulfillmentMethod, FulfillmentMethodRule>>;
3089
+ /** 유형별 허용 방식 — 첫 값이 유형 기본이다 */
3090
+ export declare const FULFILLMENT_METHODS_BY_TYPE: Readonly<Record<FulfillmentType, readonly FulfillmentMethod[]>>;
3091
+ /** 유형의 기본 방식 — 허용 방식을 두지 않은 상품·이 필드 이전 주문상품 */
3092
+ export declare function defaultFulfillmentMethodOf(type: string | null | undefined): FulfillmentMethod;
3093
+ /** 상품의 허용 방식 — 두지 않았으면 유형 기본 하나다 */
3094
+ export declare function fulfillmentMethodsOf(fulfillment: {
3095
+ type: string;
3096
+ methods?: readonly string[] | null;
3097
+ }): FulfillmentMethod[];
3098
+ /** 저장된 방식 → 방식. null·모르는 값은 유형 기본이다 */
3099
+ export declare function fulfillmentMethodOf(type: string | null | undefined, method: string | null | undefined): FulfillmentMethod;
3100
+ /**
3101
+ * 택배 배송이 필요한가 — 배송비 묶음·배송지·발송 흐름의 판정은 이 함수 하나를 지난다.
3102
+ * 방식을 주면 방식 규칙도 본다(배송 상품의 방문 수령은 배송이 없다). 방식을 모르면 유형 규칙만 본다.
3103
+ */
3104
+ export declare function requiresShipping(type: string | null | undefined, method?: string | null): boolean;
3105
+ /** 반품에 수거가 필요한가 — 비실물 반품은 수거 등록·수거 완료 없이 승인한다 */
3106
+ export declare function requiresCollection(type: string | null | undefined): boolean;
3107
+ /**
3108
+ * 배송이 없는 주문상품의 배송 묶음 키 (`order_items.delivery_bundle_key`).
3109
+ *
3110
+ * null로 두면 환불 정산이 #29 이전 주문의 레거시 폴백(「묶음 = 같은 상품」, 상품의 **현재** 배송비)을 탄다.
3111
+ * 이 키를 만나면 배송비 환불·차감이 0이고 `orders.delivery_fee_settlements`에 항목을 만들지 않는다.
3112
+ * 정책 지문 키(`b:…`)와 겹치지 않는다.
3113
+ */
3114
+ export declare const NO_SHIPPING_BUNDLE_KEY = "none";
3115
+ /** 배송비 유형 — 무료·유료·조건부 무료 */
3116
+ export declare const deliveryTypeSchema: z.ZodEnum<{
3117
+ FREE: "FREE";
3118
+ PAID: "PAID";
3119
+ CONDITIONAL_FREE: "CONDITIONAL_FREE";
3120
+ }>;
3121
+ export type DeliveryType = z.infer<typeof deliveryTypeSchema>;
3122
+ /**
3123
+ * 상품 이행 — 등록(POST). 배송 상품의 `shipping`을 생략하면 기본값(유료 배송·상점 기본 배송비·기본 출고지·반품지)이다.
3124
+ */
3125
+ export declare const productFulfillmentCreateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3126
+ type: z.ZodLiteral<"SHIPPING">;
3127
+ shipping: z.ZodOptional<z.ZodObject<{
3128
+ deliveryType: z.ZodDefault<z.ZodEnum<{
3129
+ FREE: "FREE";
3130
+ PAID: "PAID";
3131
+ CONDITIONAL_FREE: "CONDITIONAL_FREE";
3132
+ }>>;
3133
+ deliveryFee: z.ZodOptional<z.ZodNumber>;
3134
+ conditionalFreeAmount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3135
+ shippingAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3136
+ returnAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3137
+ }, z.core.$strict>>;
3138
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
3139
+ CARRIER: "CARRIER";
3140
+ DIRECT: "DIRECT";
3141
+ PICKUP: "PICKUP";
3142
+ PROVIDED: "PROVIDED";
3143
+ }>>>;
3144
+ }, z.core.$strict>, z.ZodObject<{
3145
+ type: z.ZodLiteral<"MANUAL">;
3146
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
3147
+ CARRIER: "CARRIER";
3148
+ DIRECT: "DIRECT";
3149
+ PICKUP: "PICKUP";
3150
+ PROVIDED: "PROVIDED";
3151
+ }>>>;
3152
+ }, z.core.$strict>], "type">;
3153
+ export type ProductFulfillmentCreate = z.infer<typeof productFulfillmentCreateSchema>;
3154
+ /** 등록 요청의 입력 모양 — 기본값이 채워지기 전(생략 가능한 필드가 optional) */
3155
+ export type ProductFulfillmentCreateInput = z.input<typeof productFulfillmentCreateSchema>;
3156
+ /**
3157
+ * 상품 이행 — 수정(PUT·PATCH). 통째 교체이고 유형 키와 그 안의 필드가 **모두 필수**다. 서버는 현재 값과 병합하지 않는다.
3158
+ * `fulfillment` 자체를 생략하면 이행을 바꾸지 않는다.
3159
+ */
3160
+ export declare const productFulfillmentUpdateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3161
+ type: z.ZodLiteral<"SHIPPING">;
3162
+ shipping: z.ZodObject<{
3163
+ deliveryType: z.ZodEnum<{
3164
+ FREE: "FREE";
3165
+ PAID: "PAID";
3166
+ CONDITIONAL_FREE: "CONDITIONAL_FREE";
3167
+ }>;
3168
+ deliveryFee: z.ZodNumber;
3169
+ conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3170
+ shippingAddressId: z.ZodNullable<z.ZodString>;
3171
+ returnAddressId: z.ZodNullable<z.ZodString>;
3172
+ }, z.core.$strict>;
3173
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
3174
+ CARRIER: "CARRIER";
3175
+ DIRECT: "DIRECT";
3176
+ PICKUP: "PICKUP";
3177
+ PROVIDED: "PROVIDED";
3178
+ }>>>;
3179
+ }, z.core.$strict>, z.ZodObject<{
3180
+ type: z.ZodLiteral<"MANUAL">;
3181
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
3182
+ CARRIER: "CARRIER";
3183
+ DIRECT: "DIRECT";
3184
+ PICKUP: "PICKUP";
3185
+ PROVIDED: "PROVIDED";
3186
+ }>>>;
3187
+ }, z.core.$strict>], "type">;
3188
+ export type ProductFulfillmentUpdate = z.infer<typeof productFulfillmentUpdateSchema>;
3189
+ /**
3190
+ * 저장된 상품 이행 — 알려진 유형의 닫힌 유니온. 서버의 상품 엔티티와 응답이 이 모양을 쓴다.
3191
+ * 응답 파싱은 `productFulfillmentResponseSchema`(열린 유니온)를 쓴다.
3192
+ */
3193
+ export declare const productFulfillmentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3194
+ type: z.ZodLiteral<"SHIPPING">;
3195
+ shipping: z.ZodObject<{
3196
+ deliveryType: z.ZodEnum<{
3197
+ FREE: "FREE";
3198
+ PAID: "PAID";
3199
+ CONDITIONAL_FREE: "CONDITIONAL_FREE";
3200
+ }>;
3201
+ deliveryFee: z.ZodNumber;
3202
+ conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3203
+ shippingAddressId: z.ZodNullable<z.ZodString>;
3204
+ returnAddressId: z.ZodNullable<z.ZodString>;
3205
+ }, z.core.$strip>;
3206
+ methods: z.ZodOptional<z.ZodArray<z.ZodString>>;
3207
+ }, z.core.$strip>, z.ZodObject<{
3208
+ type: z.ZodLiteral<"MANUAL">;
3209
+ methods: z.ZodOptional<z.ZodArray<z.ZodString>>;
3210
+ }, z.core.$strip>], "type">;
3211
+ export type ProductFulfillment = z.infer<typeof productFulfillmentSchema>;
3212
+ /** 유형 이름 → 그 유형의 저장된 이행 */
3213
+ export type ProductFulfillmentOf<T extends FulfillmentType> = Extract<ProductFulfillment, {
3214
+ type: T;
3215
+ }>;
3216
+ /** 응답이 알려 주는 모르는 유형 — SDK가 아직 모르는 유형(서버가 나중에 더한 유형) */
3217
+ export interface UnknownFulfillment {
3218
+ type: "OTHER";
3219
+ /** 서버가 보낸 유형 이름 */
3220
+ rawType: string;
3221
+ }
3222
+ /**
3223
+ * 열린 응답 유니온 — 알려진 유형은 판별 유니온으로 검사하고, **모르는 유형만** `{ type: "OTHER", rawType }`로 읽는다.
3224
+ *
3225
+ * `type: z.string()` 가지를 그대로 두면 TS가 `type === "SHIPPING"`으로 좁혀도 문자열 가지가 남는다. `OTHER` 리터럴로 바꿔 좁히기를
3226
+ * 지킨다. 알려진 유형의 모양이 틀린 응답은 폴백으로 숨기지 않고 파싱 오류로 둔다.
3227
+ */
3228
+ export declare function openFulfillmentUnion<T extends z.ZodType>(known: T): z.ZodUnion<readonly [T, z.ZodPipe<z.ZodObject<{
3229
+ type: z.ZodString;
3230
+ }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3231
+ [x: string]: unknown;
3232
+ type: string;
3233
+ }>>]>;
3234
+ export declare const productFulfillmentResponseSchema: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3235
+ type: z.ZodLiteral<"SHIPPING">;
3236
+ shipping: z.ZodObject<{
3237
+ deliveryType: z.ZodEnum<{
3238
+ FREE: "FREE";
3239
+ PAID: "PAID";
3240
+ CONDITIONAL_FREE: "CONDITIONAL_FREE";
3241
+ }>;
3242
+ deliveryFee: z.ZodNumber;
3243
+ conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3244
+ shippingAddressId: z.ZodNullable<z.ZodString>;
3245
+ returnAddressId: z.ZodNullable<z.ZodString>;
3246
+ }, z.core.$strip>;
3247
+ methods: z.ZodOptional<z.ZodArray<z.ZodString>>;
3248
+ }, z.core.$strip>, z.ZodObject<{
3249
+ type: z.ZodLiteral<"MANUAL">;
3250
+ methods: z.ZodOptional<z.ZodArray<z.ZodString>>;
3251
+ }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3252
+ type: z.ZodString;
3253
+ }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3254
+ [x: string]: unknown;
3255
+ type: string;
3256
+ }>>]>;
3257
+ export type ProductFulfillmentView = z.infer<typeof productFulfillmentResponseSchema>;
3258
+ /** 주문상품의 주문 시점 픽업 장소 — 장소를 고치거나 지워도 이 주문의 안내는 바뀌지 않는다 */
3259
+ export declare const pickupLocationSnapshotSchema: z.ZodObject<{
3260
+ locationId: z.ZodString;
3261
+ name: z.ZodString;
3262
+ address: z.ZodString;
3263
+ phone: z.ZodNullable<z.ZodString>;
3264
+ hours: z.ZodNullable<z.ZodString>;
3265
+ }, z.core.$strip>;
3266
+ export type PickupLocationSnapshot = z.infer<typeof pickupLocationSnapshotSchema>;
3267
+ /**
3268
+ * 주문상품의 주문 시점 이행 — 결제 확정이 주문서 줄에서 굳힌다. 상품의 현재 값이 아니다. 서버는 주문상품 컬럼
3269
+ * (`fulfillment_type`·`delivery_bundle_key`)과 jsonb(`fulfillment_snapshot`)를 합쳐 이 모양을 만든다.
3270
+ */
3271
+ export declare const orderItemFulfillmentSnapshotSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3272
+ type: z.ZodLiteral<"SHIPPING">;
3273
+ shipping: z.ZodObject<{
3274
+ bundleKey: z.ZodNullable<z.ZodString>;
3275
+ returnAddressId: z.ZodNullable<z.ZodString>;
3276
+ }, z.core.$strip>;
3277
+ method: z.ZodOptional<z.ZodString>;
3278
+ pickupLocation: z.ZodOptional<z.ZodObject<{
3279
+ locationId: z.ZodString;
3280
+ name: z.ZodString;
3281
+ address: z.ZodString;
3282
+ phone: z.ZodNullable<z.ZodString>;
3283
+ hours: z.ZodNullable<z.ZodString>;
3284
+ }, z.core.$strip>>;
3285
+ }, z.core.$strip>, z.ZodObject<{
3286
+ type: z.ZodLiteral<"MANUAL">;
3287
+ method: z.ZodOptional<z.ZodString>;
3288
+ pickupLocation: z.ZodOptional<z.ZodObject<{
3289
+ locationId: z.ZodString;
3290
+ name: z.ZodString;
3291
+ address: z.ZodString;
3292
+ phone: z.ZodNullable<z.ZodString>;
3293
+ hours: z.ZodNullable<z.ZodString>;
3294
+ }, z.core.$strip>>;
3295
+ }, z.core.$strip>], "type">;
3296
+ export type OrderItemFulfillmentSnapshot = z.infer<typeof orderItemFulfillmentSnapshotSchema>;
3297
+ export declare const orderItemFulfillmentSnapshotResponseSchema: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3298
+ type: z.ZodLiteral<"SHIPPING">;
3299
+ shipping: z.ZodObject<{
3300
+ bundleKey: z.ZodNullable<z.ZodString>;
3301
+ returnAddressId: z.ZodNullable<z.ZodString>;
3302
+ }, z.core.$strip>;
3303
+ method: z.ZodOptional<z.ZodString>;
3304
+ pickupLocation: z.ZodOptional<z.ZodObject<{
3305
+ locationId: z.ZodString;
3306
+ name: z.ZodString;
3307
+ address: z.ZodString;
3308
+ phone: z.ZodNullable<z.ZodString>;
3309
+ hours: z.ZodNullable<z.ZodString>;
3310
+ }, z.core.$strip>>;
3311
+ }, z.core.$strip>, z.ZodObject<{
3312
+ type: z.ZodLiteral<"MANUAL">;
3313
+ method: z.ZodOptional<z.ZodString>;
3314
+ pickupLocation: z.ZodOptional<z.ZodObject<{
3315
+ locationId: z.ZodString;
3316
+ name: z.ZodString;
3317
+ address: z.ZodString;
3318
+ phone: z.ZodNullable<z.ZodString>;
3319
+ hours: z.ZodNullable<z.ZodString>;
3320
+ }, z.core.$strip>>;
3321
+ }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3322
+ type: z.ZodString;
3323
+ }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3324
+ [x: string]: unknown;
3325
+ type: string;
3326
+ }>>]>;
3327
+ export type OrderItemFulfillmentSnapshotView = z.infer<typeof orderItemFulfillmentSnapshotResponseSchema>;
3328
+ /** 상점당 픽업 장소 상한 */
3329
+ export declare const MAX_PICKUP_LOCATIONS = 20;
3330
+ /** 방문 수령(`PICKUP`) 장소 — 상점 설정이다. 구매자가 주문서에서 고르고 주문상품에 주문 시점 값이 남는다 */
3331
+ export declare const pickupLocationSchema: z.ZodObject<{
3332
+ locationId: z.ZodString;
3333
+ name: z.ZodString;
3334
+ address: z.ZodString;
3335
+ phone: z.ZodNullable<z.ZodString>;
3336
+ hours: z.ZodNullable<z.ZodString>;
3337
+ usable: z.ZodBoolean;
3338
+ sortOrder: z.ZodNumber;
3339
+ createdAt: z.ZodString;
3340
+ }, z.core.$strip>;
3341
+ export type PickupLocation = z.infer<typeof pickupLocationSchema>;
3342
+ export declare const pickupLocationRequestSchema: z.ZodObject<{
3343
+ name: z.ZodString;
3344
+ address: z.ZodString;
3345
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3346
+ hours: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3347
+ usable: z.ZodDefault<z.ZodBoolean>;
3348
+ }, z.core.$strict>;
3349
+ export type PickupLocationRequest = z.infer<typeof pickupLocationRequestSchema>;
3350
+ export type PickupLocationRequestInput = z.input<typeof pickupLocationRequestSchema>;
2626
3351
  //#endregion
2627
3352
  //#region src/schemas/login.d.ts
2628
3353
  /** 소셜 로그인 공급자 */
@@ -2895,6 +3620,7 @@ export declare const eventTypeSchema: z.ZodEnum<{
2895
3620
  "INQUIRY.CREATED": "INQUIRY.CREATED";
2896
3621
  "REVIEW.CREATED": "REVIEW.CREATED";
2897
3622
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3623
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
2898
3624
  }>;
2899
3625
  export type EventType = z.infer<typeof eventTypeSchema>;
2900
3626
  export declare const webhookStatusSchema: z.ZodEnum<{
@@ -2921,6 +3647,7 @@ export declare const webhookSchema: z.ZodObject<{
2921
3647
  "INQUIRY.CREATED": "INQUIRY.CREATED";
2922
3648
  "REVIEW.CREATED": "REVIEW.CREATED";
2923
3649
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3650
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
2924
3651
  }>>;
2925
3652
  status: z.ZodEnum<{
2926
3653
  SUSPENDED: "SUSPENDED";
@@ -2951,6 +3678,7 @@ export declare const webhookCreatedSchema: z.ZodObject<{
2951
3678
  "INQUIRY.CREATED": "INQUIRY.CREATED";
2952
3679
  "REVIEW.CREATED": "REVIEW.CREATED";
2953
3680
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3681
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
2954
3682
  }>>;
2955
3683
  status: z.ZodEnum<{
2956
3684
  SUSPENDED: "SUSPENDED";
@@ -3031,6 +3759,7 @@ export declare const webhookDeliverySchema: z.ZodObject<{
3031
3759
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3032
3760
  "REVIEW.CREATED": "REVIEW.CREATED";
3033
3761
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3762
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3034
3763
  }>;
3035
3764
  url: z.ZodString;
3036
3765
  status: z.ZodEnum<{
@@ -3084,6 +3813,7 @@ export declare const webhookDeliveryDetailSchema: z.ZodObject<{
3084
3813
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3085
3814
  "REVIEW.CREATED": "REVIEW.CREATED";
3086
3815
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3816
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3087
3817
  }>;
3088
3818
  url: z.ZodString;
3089
3819
  status: z.ZodEnum<{
@@ -3146,6 +3876,7 @@ export declare const webhookDeliveryListQuerySchema: z.ZodObject<{
3146
3876
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3147
3877
  "REVIEW.CREATED": "REVIEW.CREATED";
3148
3878
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3879
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3149
3880
  }>>;
3150
3881
  resourceId: z.ZodOptional<z.ZodString>;
3151
3882
  limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
@@ -3173,6 +3904,7 @@ export declare const webhookTestRequestSchema: z.ZodObject<{
3173
3904
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3174
3905
  "REVIEW.CREATED": "REVIEW.CREATED";
3175
3906
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3907
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3176
3908
  }>;
3177
3909
  }, z.core.$strip>;
3178
3910
  export type WebhookTestRequest = z.infer<typeof webhookTestRequestSchema>;
@@ -3214,6 +3946,7 @@ export declare const webhookRequestSchema: z.ZodObject<{
3214
3946
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3215
3947
  "REVIEW.CREATED": "REVIEW.CREATED";
3216
3948
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3949
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3217
3950
  }>>;
3218
3951
  }, z.core.$strip>;
3219
3952
  export type WebhookRequest = z.infer<typeof webhookRequestSchema>;
@@ -3286,208 +4019,6 @@ export declare const reviewReportResultSchema: z.ZodObject<{
3286
4019
  }, z.core.$strip>;
3287
4020
  export type ReviewReportResult = z.infer<typeof reviewReportResultSchema>;
3288
4021
  //#endregion
3289
- //#region src/schemas/fulfillment.d.ts
3290
- /**
3291
- * 상품 유형 (이슈 #48·#57) — 배송이 필요한 상품과 필요 없는 상품을 가르는 축이다.
3292
- *
3293
- * **상품 유형은 이행 방식 하나로 표현한다.** `fulfillment.type`이 배송 필요 여부, 이행 흐름, 클레임 규칙을 정한다.
3294
- * 코드 곳곳에서 유형 이름으로 분기하지 않고 이 파일의 판정 함수(`requiresShipping`·`fulfillmentRuleOf`)를 지난다.
3295
- *
3296
- * 주문상품 상태 enum은 바꾸지 않는다. 비실물의 **제공 완료는 `DELIVERED`를 재사용한다** — 새 상태를 더하면 기존 소비자의
3297
- * 상태 분기(배송완료 뒤 구매확정 대기, 반품 가능 판정)가 새 값을 모른다. 표시는 유형으로 가른다.
3298
- */
3299
- /**
3300
- * 상품 유형.
3301
- * - `SHIPPING` 배송 상품. 택배로 발송하고 송장·배송 추적으로 배송완료가 된다
3302
- * - `MANUAL` 배송 없는 상품(비실물). 셀러가 제공 처리(`POST /v1/order-items/{orderItemId}/fulfill`)로 제공 완료를 기록한다
3303
- *
3304
- * 비실물의 세부 구분(파일 다운로드·코드 발급·이용권·방문 수령)은 2026-09-28에 제품에서 뺐다(이슈 #48 범위 축소).
3305
- * 이름은 이행 방식이다 — `SHIPPING`이 택배 발송이듯 `MANUAL`은 셀러가 직접 제공한다는 뜻이다.
3306
- */
3307
- export declare const fulfillmentTypeSchema: z.ZodEnum<{
3308
- SHIPPING: "SHIPPING";
3309
- MANUAL: "MANUAL";
3310
- }>;
3311
- export type FulfillmentType = z.infer<typeof fulfillmentTypeSchema>;
3312
- /**
3313
- * 응답 스키마용 유형 — 서버가 나중에 유형을 더해도 옛 SDK가 응답 파싱에서 깨지지 않게 문자열로 받는다.
3314
- * 요청은 `fulfillmentTypeSchema`(닫힌 enum)로 검증한다.
3315
- */
3316
- export declare const fulfillmentTypeResponseSchema: z.ZodString;
3317
- /** 유형 하나의 규칙 — 배송·클레임이 이 표를 읽는다 */
3318
- export interface FulfillmentRule {
3319
- /** 택배 배송이 필요한가 — 배송비·배송지·발송 흐름의 대상인가 */
3320
- requiresShipping: boolean;
3321
- /** 반품에 수거가 필요한가 — 실물만 수거한다 */
3322
- requiresCollection: boolean;
3323
- /** 교환을 받는가 — 실물만 받는다 */
3324
- exchangeSupported: boolean;
3325
- }
3326
- /** 유형별 규칙표 — **유일한 원천이다.** */
3327
- export declare const FULFILLMENT_RULES: Readonly<Record<FulfillmentType, FulfillmentRule>>;
3328
- /**
3329
- * 저장된 값 → 유형. null·모르는 값은 `SHIPPING`이다 — 이 필드 이전의 상품·주문상품은 모두 배송 상품이었다.
3330
- */
3331
- export declare function fulfillmentTypeOf(value: string | null | undefined): FulfillmentType;
3332
- /** 유형의 규칙 — 모르는 값은 배송 상품 규칙이다 */
3333
- export declare function fulfillmentRuleOf(type: string | null | undefined): FulfillmentRule;
3334
- /** 택배 배송이 필요한가 — 배송비 묶음·배송지·발송 흐름의 판정은 이 함수 하나를 지난다 */
3335
- export declare function requiresShipping(type: string | null | undefined): boolean;
3336
- /** 반품에 수거가 필요한가 — 비실물 반품은 수거 등록·수거 완료 없이 승인한다 */
3337
- export declare function requiresCollection(type: string | null | undefined): boolean;
3338
- /**
3339
- * 배송이 없는 주문상품의 배송 묶음 키 (`order_items.delivery_bundle_key`).
3340
- *
3341
- * null로 두면 환불 정산이 #29 이전 주문의 레거시 폴백(「묶음 = 같은 상품」, 상품의 **현재** 배송비)을 탄다.
3342
- * 이 키를 만나면 배송비 환불·차감이 0이고 `orders.delivery_fee_settlements`에 항목을 만들지 않는다.
3343
- * 정책 지문 키(`b:…`)와 겹치지 않는다.
3344
- */
3345
- export declare const NO_SHIPPING_BUNDLE_KEY = "none";
3346
- /** 배송비 유형 — 무료·유료·조건부 무료 */
3347
- export declare const deliveryTypeSchema: z.ZodEnum<{
3348
- FREE: "FREE";
3349
- PAID: "PAID";
3350
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3351
- }>;
3352
- export type DeliveryType = z.infer<typeof deliveryTypeSchema>;
3353
- /**
3354
- * 상품 이행 — 등록(POST). 배송 상품의 `shipping`을 생략하면 기본값(유료 배송·상점 기본 배송비·기본 출고지·반품지)이다.
3355
- */
3356
- export declare const productFulfillmentCreateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3357
- type: z.ZodLiteral<"SHIPPING">;
3358
- shipping: z.ZodOptional<z.ZodObject<{
3359
- deliveryType: z.ZodDefault<z.ZodEnum<{
3360
- FREE: "FREE";
3361
- PAID: "PAID";
3362
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3363
- }>>;
3364
- deliveryFee: z.ZodOptional<z.ZodNumber>;
3365
- conditionalFreeAmount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3366
- shippingAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3367
- returnAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3368
- }, z.core.$strict>>;
3369
- }, z.core.$strict>, z.ZodObject<{
3370
- type: z.ZodLiteral<"MANUAL">;
3371
- }, z.core.$strict>], "type">;
3372
- export type ProductFulfillmentCreate = z.infer<typeof productFulfillmentCreateSchema>;
3373
- /** 등록 요청의 입력 모양 — 기본값이 채워지기 전(생략 가능한 필드가 optional) */
3374
- export type ProductFulfillmentCreateInput = z.input<typeof productFulfillmentCreateSchema>;
3375
- /**
3376
- * 상품 이행 — 수정(PUT·PATCH). 통째 교체이고 유형 키와 그 안의 필드가 **모두 필수**다. 서버는 현재 값과 병합하지 않는다.
3377
- * `fulfillment` 자체를 생략하면 이행을 바꾸지 않는다.
3378
- */
3379
- export declare const productFulfillmentUpdateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3380
- type: z.ZodLiteral<"SHIPPING">;
3381
- shipping: z.ZodObject<{
3382
- deliveryType: z.ZodEnum<{
3383
- FREE: "FREE";
3384
- PAID: "PAID";
3385
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3386
- }>;
3387
- deliveryFee: z.ZodNumber;
3388
- conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3389
- shippingAddressId: z.ZodNullable<z.ZodString>;
3390
- returnAddressId: z.ZodNullable<z.ZodString>;
3391
- }, z.core.$strict>;
3392
- }, z.core.$strict>, z.ZodObject<{
3393
- type: z.ZodLiteral<"MANUAL">;
3394
- }, z.core.$strict>], "type">;
3395
- export type ProductFulfillmentUpdate = z.infer<typeof productFulfillmentUpdateSchema>;
3396
- /**
3397
- * 저장된 상품 이행 — 알려진 유형의 닫힌 유니온. 서버의 상품 엔티티와 응답이 이 모양을 쓴다.
3398
- * 응답 파싱은 `productFulfillmentResponseSchema`(열린 유니온)를 쓴다.
3399
- */
3400
- export declare const productFulfillmentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3401
- type: z.ZodLiteral<"SHIPPING">;
3402
- shipping: z.ZodObject<{
3403
- deliveryType: z.ZodEnum<{
3404
- FREE: "FREE";
3405
- PAID: "PAID";
3406
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3407
- }>;
3408
- deliveryFee: z.ZodNumber;
3409
- conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3410
- shippingAddressId: z.ZodNullable<z.ZodString>;
3411
- returnAddressId: z.ZodNullable<z.ZodString>;
3412
- }, z.core.$strip>;
3413
- }, z.core.$strip>, z.ZodObject<{
3414
- type: z.ZodLiteral<"MANUAL">;
3415
- }, z.core.$strip>], "type">;
3416
- export type ProductFulfillment = z.infer<typeof productFulfillmentSchema>;
3417
- /** 유형 이름 → 그 유형의 저장된 이행 */
3418
- export type ProductFulfillmentOf<T extends FulfillmentType> = Extract<ProductFulfillment, {
3419
- type: T;
3420
- }>;
3421
- /** 응답이 알려 주는 모르는 유형 — SDK가 아직 모르는 유형(서버가 나중에 더한 유형) */
3422
- export interface UnknownFulfillment {
3423
- type: "OTHER";
3424
- /** 서버가 보낸 유형 이름 */
3425
- rawType: string;
3426
- }
3427
- /**
3428
- * 열린 응답 유니온 — 알려진 유형은 판별 유니온으로 검사하고, **모르는 유형만** `{ type: "OTHER", rawType }`로 읽는다.
3429
- *
3430
- * `type: z.string()` 가지를 그대로 두면 TS가 `type === "SHIPPING"`으로 좁혀도 문자열 가지가 남는다. `OTHER` 리터럴로 바꿔 좁히기를
3431
- * 지킨다. 알려진 유형의 모양이 틀린 응답은 폴백으로 숨기지 않고 파싱 오류로 둔다.
3432
- */
3433
- export declare function openFulfillmentUnion<T extends z.ZodType>(known: T): z.ZodUnion<readonly [T, z.ZodPipe<z.ZodObject<{
3434
- type: z.ZodString;
3435
- }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3436
- [x: string]: unknown;
3437
- type: string;
3438
- }>>]>;
3439
- export declare const productFulfillmentResponseSchema: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3440
- type: z.ZodLiteral<"SHIPPING">;
3441
- shipping: z.ZodObject<{
3442
- deliveryType: z.ZodEnum<{
3443
- FREE: "FREE";
3444
- PAID: "PAID";
3445
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3446
- }>;
3447
- deliveryFee: z.ZodNumber;
3448
- conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3449
- shippingAddressId: z.ZodNullable<z.ZodString>;
3450
- returnAddressId: z.ZodNullable<z.ZodString>;
3451
- }, z.core.$strip>;
3452
- }, z.core.$strip>, z.ZodObject<{
3453
- type: z.ZodLiteral<"MANUAL">;
3454
- }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3455
- type: z.ZodString;
3456
- }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3457
- [x: string]: unknown;
3458
- type: string;
3459
- }>>]>;
3460
- export type ProductFulfillmentView = z.infer<typeof productFulfillmentResponseSchema>;
3461
- /**
3462
- * 주문상품의 주문 시점 이행 — 결제 확정이 주문서 줄에서 굳힌다. 상품의 현재 값이 아니다. 서버는 주문상품 컬럼
3463
- * (`fulfillment_type`·`delivery_bundle_key`)과 jsonb(`fulfillment_snapshot`)를 합쳐 이 모양을 만든다.
3464
- */
3465
- export declare const orderItemFulfillmentSnapshotSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3466
- type: z.ZodLiteral<"SHIPPING">;
3467
- shipping: z.ZodObject<{
3468
- bundleKey: z.ZodNullable<z.ZodString>;
3469
- returnAddressId: z.ZodNullable<z.ZodString>;
3470
- }, z.core.$strip>;
3471
- }, z.core.$strip>, z.ZodObject<{
3472
- type: z.ZodLiteral<"MANUAL">;
3473
- }, z.core.$strip>], "type">;
3474
- export type OrderItemFulfillmentSnapshot = z.infer<typeof orderItemFulfillmentSnapshotSchema>;
3475
- export declare const orderItemFulfillmentSnapshotResponseSchema: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3476
- type: z.ZodLiteral<"SHIPPING">;
3477
- shipping: z.ZodObject<{
3478
- bundleKey: z.ZodNullable<z.ZodString>;
3479
- returnAddressId: z.ZodNullable<z.ZodString>;
3480
- }, z.core.$strip>;
3481
- }, z.core.$strip>, z.ZodObject<{
3482
- type: z.ZodLiteral<"MANUAL">;
3483
- }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3484
- type: z.ZodString;
3485
- }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3486
- [x: string]: unknown;
3487
- type: string;
3488
- }>>]>;
3489
- export type OrderItemFulfillmentSnapshotView = z.infer<typeof orderItemFulfillmentSnapshotResponseSchema>;
3490
- //#endregion
3491
4022
  //#region src/schemas/order.d.ts
3492
4023
  export declare const orderSummarySchema: z.ZodObject<{
3493
4024
  orderId: z.ZodString;
@@ -3559,7 +4090,17 @@ export declare const orderItemSchema: z.ZodObject<{
3559
4090
  customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3560
4091
  label: z.ZodString;
3561
4092
  value: z.ZodString;
4093
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4094
+ type: z.ZodOptional<z.ZodString>;
3562
4095
  }, z.core.$strip>>>>;
4096
+ stay: z.ZodOptional<z.ZodObject<{
4097
+ checkIn: z.ZodString;
4098
+ checkOut: z.ZodString;
4099
+ nights: z.ZodArray<z.ZodObject<{
4100
+ date: z.ZodString;
4101
+ price: z.ZodNumber;
4102
+ }, z.core.$strip>>;
4103
+ }, z.core.$strip>>;
3563
4104
  sellerCode: z.ZodNullable<z.ZodString>;
3564
4105
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3565
4106
  type: z.ZodLiteral<"SHIPPING">;
@@ -3567,8 +4108,24 @@ export declare const orderItemSchema: z.ZodObject<{
3567
4108
  bundleKey: z.ZodNullable<z.ZodString>;
3568
4109
  returnAddressId: z.ZodNullable<z.ZodString>;
3569
4110
  }, z.core.$strip>;
4111
+ method: z.ZodOptional<z.ZodString>;
4112
+ pickupLocation: z.ZodOptional<z.ZodObject<{
4113
+ locationId: z.ZodString;
4114
+ name: z.ZodString;
4115
+ address: z.ZodString;
4116
+ phone: z.ZodNullable<z.ZodString>;
4117
+ hours: z.ZodNullable<z.ZodString>;
4118
+ }, z.core.$strip>>;
3570
4119
  }, z.core.$strip>, z.ZodObject<{
3571
4120
  type: z.ZodLiteral<"MANUAL">;
4121
+ method: z.ZodOptional<z.ZodString>;
4122
+ pickupLocation: z.ZodOptional<z.ZodObject<{
4123
+ locationId: z.ZodString;
4124
+ name: z.ZodString;
4125
+ address: z.ZodString;
4126
+ phone: z.ZodNullable<z.ZodString>;
4127
+ hours: z.ZodNullable<z.ZodString>;
4128
+ }, z.core.$strip>>;
3572
4129
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3573
4130
  type: z.ZodString;
3574
4131
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -3722,7 +4279,17 @@ export declare const orderSchema: z.ZodObject<{
3722
4279
  customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3723
4280
  label: z.ZodString;
3724
4281
  value: z.ZodString;
4282
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4283
+ type: z.ZodOptional<z.ZodString>;
3725
4284
  }, z.core.$strip>>>>;
4285
+ stay: z.ZodOptional<z.ZodObject<{
4286
+ checkIn: z.ZodString;
4287
+ checkOut: z.ZodString;
4288
+ nights: z.ZodArray<z.ZodObject<{
4289
+ date: z.ZodString;
4290
+ price: z.ZodNumber;
4291
+ }, z.core.$strip>>;
4292
+ }, z.core.$strip>>;
3726
4293
  sellerCode: z.ZodNullable<z.ZodString>;
3727
4294
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3728
4295
  type: z.ZodLiteral<"SHIPPING">;
@@ -3730,8 +4297,24 @@ export declare const orderSchema: z.ZodObject<{
3730
4297
  bundleKey: z.ZodNullable<z.ZodString>;
3731
4298
  returnAddressId: z.ZodNullable<z.ZodString>;
3732
4299
  }, z.core.$strip>;
4300
+ method: z.ZodOptional<z.ZodString>;
4301
+ pickupLocation: z.ZodOptional<z.ZodObject<{
4302
+ locationId: z.ZodString;
4303
+ name: z.ZodString;
4304
+ address: z.ZodString;
4305
+ phone: z.ZodNullable<z.ZodString>;
4306
+ hours: z.ZodNullable<z.ZodString>;
4307
+ }, z.core.$strip>>;
3733
4308
  }, z.core.$strip>, z.ZodObject<{
3734
4309
  type: z.ZodLiteral<"MANUAL">;
4310
+ method: z.ZodOptional<z.ZodString>;
4311
+ pickupLocation: z.ZodOptional<z.ZodObject<{
4312
+ locationId: z.ZodString;
4313
+ name: z.ZodString;
4314
+ address: z.ZodString;
4315
+ phone: z.ZodNullable<z.ZodString>;
4316
+ hours: z.ZodNullable<z.ZodString>;
4317
+ }, z.core.$strip>>;
3735
4318
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3736
4319
  type: z.ZodString;
3737
4320
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -3841,7 +4424,17 @@ export declare const orderItemPageSchema: z.ZodObject<{
3841
4424
  customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3842
4425
  label: z.ZodString;
3843
4426
  value: z.ZodString;
4427
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4428
+ type: z.ZodOptional<z.ZodString>;
3844
4429
  }, z.core.$strip>>>>;
4430
+ stay: z.ZodOptional<z.ZodObject<{
4431
+ checkIn: z.ZodString;
4432
+ checkOut: z.ZodString;
4433
+ nights: z.ZodArray<z.ZodObject<{
4434
+ date: z.ZodString;
4435
+ price: z.ZodNumber;
4436
+ }, z.core.$strip>>;
4437
+ }, z.core.$strip>>;
3845
4438
  sellerCode: z.ZodNullable<z.ZodString>;
3846
4439
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3847
4440
  type: z.ZodLiteral<"SHIPPING">;
@@ -3849,8 +4442,24 @@ export declare const orderItemPageSchema: z.ZodObject<{
3849
4442
  bundleKey: z.ZodNullable<z.ZodString>;
3850
4443
  returnAddressId: z.ZodNullable<z.ZodString>;
3851
4444
  }, z.core.$strip>;
4445
+ method: z.ZodOptional<z.ZodString>;
4446
+ pickupLocation: z.ZodOptional<z.ZodObject<{
4447
+ locationId: z.ZodString;
4448
+ name: z.ZodString;
4449
+ address: z.ZodString;
4450
+ phone: z.ZodNullable<z.ZodString>;
4451
+ hours: z.ZodNullable<z.ZodString>;
4452
+ }, z.core.$strip>>;
3852
4453
  }, z.core.$strip>, z.ZodObject<{
3853
4454
  type: z.ZodLiteral<"MANUAL">;
4455
+ method: z.ZodOptional<z.ZodString>;
4456
+ pickupLocation: z.ZodOptional<z.ZodObject<{
4457
+ locationId: z.ZodString;
4458
+ name: z.ZodString;
4459
+ address: z.ZodString;
4460
+ phone: z.ZodNullable<z.ZodString>;
4461
+ hours: z.ZodNullable<z.ZodString>;
4462
+ }, z.core.$strip>>;
3854
4463
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3855
4464
  type: z.ZodString;
3856
4465
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -3970,16 +4579,16 @@ export interface OrderItemListParams extends PageParams {
3970
4579
  testPayment?: "true" | "false";
3971
4580
  }
3972
4581
  export declare const deliveryMethodSchema: z.ZodEnum<{
3973
- COURIER: "COURIER";
3974
4582
  DIRECT: "DIRECT";
4583
+ COURIER: "COURIER";
3975
4584
  QUICK: "QUICK";
3976
4585
  NOTHING: "NOTHING";
3977
4586
  }>;
3978
4587
  export type DeliveryMethod = z.infer<typeof deliveryMethodSchema>;
3979
4588
  export declare const dispatchRequestSchema: z.ZodObject<{
3980
4589
  deliveryMethod: z.ZodEnum<{
3981
- COURIER: "COURIER";
3982
4590
  DIRECT: "DIRECT";
4591
+ COURIER: "COURIER";
3983
4592
  QUICK: "QUICK";
3984
4593
  NOTHING: "NOTHING";
3985
4594
  }>;
@@ -3991,8 +4600,8 @@ export type DispatchRequest = z.infer<typeof dispatchRequestSchema>;
3991
4600
  export declare const deliveryInfoSchema: z.ZodObject<{
3992
4601
  orderItemId: z.ZodString;
3993
4602
  deliveryMethod: z.ZodEnum<{
3994
- COURIER: "COURIER";
3995
4603
  DIRECT: "DIRECT";
4604
+ COURIER: "COURIER";
3996
4605
  QUICK: "QUICK";
3997
4606
  NOTHING: "NOTHING";
3998
4607
  }>;
@@ -4018,8 +4627,8 @@ export declare const trackingStageResponseSchema: z.ZodString;
4018
4627
  export declare const deliveryStatusSchema: z.ZodObject<{
4019
4628
  orderItemId: z.ZodString;
4020
4629
  deliveryMethod: z.ZodEnum<{
4021
- COURIER: "COURIER";
4022
4630
  DIRECT: "DIRECT";
4631
+ COURIER: "COURIER";
4023
4632
  QUICK: "QUICK";
4024
4633
  NOTHING: "NOTHING";
4025
4634
  }>;
@@ -5543,6 +6152,7 @@ export declare const productVariantSchema: z.ZodObject<{
5543
6152
  weightGram: z.ZodNullable<z.ZodNumber>;
5544
6153
  sellerCode: z.ZodNullable<z.ZodString>;
5545
6154
  usable: z.ZodBoolean;
6155
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5546
6156
  hasOrders: z.ZodOptional<z.ZodBoolean>;
5547
6157
  }, z.core.$strip>;
5548
6158
  export type ProductVariant = z.infer<typeof productVariantSchema>;
@@ -5595,6 +6205,12 @@ export declare const addonGroupSchema: z.ZodObject<{
5595
6205
  }, z.core.$strip>>;
5596
6206
  }, z.core.$strip>;
5597
6207
  export type AddonGroup = z.infer<typeof addonGroupSchema>;
6208
+ /**
6209
+ * 직접 입력 타입(이슈 #115 결정 24) — 값은 늘 문자열로 오가고 서버가 타입대로 검사·정규화한다.
6210
+ * `number`는 정수, `select`는 `options` 중 하나, `date`는 `YYYY-MM-DD`, `datetime`은 오프셋 있는 ISO 8601이다.
6211
+ * `image`는 구매자 업로드(`POST /storefront/v1/uploads/order-inputs`) 주소 목록이고 `maxLength`가 최대 장수(1~5)다
6212
+ */
6213
+ export declare const CUSTOM_INPUT_TYPES: readonly ["text", "number", "select", "date", "datetime", "image"];
5598
6214
  /** 직접 입력 항목 — 예: 각인 문구 */
5599
6215
  export declare const customInputSchema: z.ZodObject<{
5600
6216
  inputId: z.ZodString;
@@ -5604,6 +6220,9 @@ export declare const customInputSchema: z.ZodObject<{
5604
6220
  required: z.ZodBoolean;
5605
6221
  usable: z.ZodBoolean;
5606
6222
  sortOrder: z.ZodNumber;
6223
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6224
+ type: z.ZodOptional<z.ZodString>;
6225
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
5607
6226
  }, z.core.$strip>;
5608
6227
  export type CustomInput = z.infer<typeof customInputSchema>;
5609
6228
  /**
@@ -5642,6 +6261,16 @@ export declare const customInputRequestSchema: z.ZodObject<{
5642
6261
  maxLength: z.ZodNumber;
5643
6262
  required: z.ZodDefault<z.ZodBoolean>;
5644
6263
  usable: z.ZodDefault<z.ZodBoolean>;
6264
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6265
+ type: z.ZodOptional<z.ZodEnum<{
6266
+ number: "number";
6267
+ date: "date";
6268
+ text: "text";
6269
+ select: "select";
6270
+ datetime: "datetime";
6271
+ image: "image";
6272
+ }>>;
6273
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
5645
6274
  }, z.core.$strip>;
5646
6275
  export type CustomInputRequest = z.infer<typeof customInputRequestSchema>;
5647
6276
  /**
@@ -5659,6 +6288,8 @@ export type OptionSelection = z.infer<typeof optionSelectionSchema>;
5659
6288
  export declare const customInputValueSchema: z.ZodObject<{
5660
6289
  label: z.ZodString;
5661
6290
  value: z.ZodString;
6291
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6292
+ type: z.ZodOptional<z.ZodString>;
5662
6293
  }, z.core.$strip>;
5663
6294
  export type CustomInputValue = z.infer<typeof customInputValueSchema>;
5664
6295
  export declare const discountSchema: z.ZodObject<{
@@ -5723,6 +6354,7 @@ export declare const productSchema: z.ZodObject<{
5723
6354
  weightGram: z.ZodNullable<z.ZodNumber>;
5724
6355
  sellerCode: z.ZodNullable<z.ZodString>;
5725
6356
  usable: z.ZodBoolean;
6357
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5726
6358
  hasOrders: z.ZodOptional<z.ZodBoolean>;
5727
6359
  }, z.core.$strip>>;
5728
6360
  addonGroups: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -5746,6 +6378,9 @@ export declare const productSchema: z.ZodObject<{
5746
6378
  required: z.ZodBoolean;
5747
6379
  usable: z.ZodBoolean;
5748
6380
  sortOrder: z.ZodNumber;
6381
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6382
+ type: z.ZodOptional<z.ZodString>;
6383
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
5749
6384
  }, z.core.$strip>>>>;
5750
6385
  optionSort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
5751
6386
  REGISTERED: "REGISTERED";
@@ -5766,14 +6401,17 @@ export declare const productSchema: z.ZodObject<{
5766
6401
  shippingAddressId: z.ZodNullable<z.ZodString>;
5767
6402
  returnAddressId: z.ZodNullable<z.ZodString>;
5768
6403
  }, z.core.$strip>;
6404
+ methods: z.ZodOptional<z.ZodArray<z.ZodString>>;
5769
6405
  }, z.core.$strip>, z.ZodObject<{
5770
6406
  type: z.ZodLiteral<"MANUAL">;
6407
+ methods: z.ZodOptional<z.ZodArray<z.ZodString>>;
5771
6408
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
5772
6409
  type: z.ZodString;
5773
6410
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
5774
6411
  [x: string]: unknown;
5775
6412
  type: string;
5776
6413
  }>>]>;
6414
+ inventoryMode: z.ZodOptional<z.ZodString>;
5777
6415
  fulfillmentTypeLocked: z.ZodBoolean;
5778
6416
  refundPolicy: z.ZodNullable<z.ZodObject<{
5779
6417
  preShipmentDeliveryFeeRefund: z.ZodOptional<z.ZodBoolean>;
@@ -5848,6 +6486,7 @@ export declare const productVariantRequestSchema: z.ZodObject<{
5848
6486
  weightGram: z.ZodOptional<z.ZodNumber>;
5849
6487
  sellerCode: z.ZodOptional<z.ZodString>;
5850
6488
  usable: z.ZodDefault<z.ZodBoolean>;
6489
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5851
6490
  }, z.core.$strip>;
5852
6491
  export type ProductVariantRequest = z.infer<typeof productVariantRequestSchema>;
5853
6492
  /** 축 × 값 → variant 전체 교체 요청 (PUT /products/{productId}/options) */
@@ -5871,6 +6510,7 @@ export declare const optionModelRequestSchema: z.ZodObject<{
5871
6510
  weightGram: z.ZodOptional<z.ZodNumber>;
5872
6511
  sellerCode: z.ZodOptional<z.ZodString>;
5873
6512
  usable: z.ZodDefault<z.ZodBoolean>;
6513
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5874
6514
  }, z.core.$strip>>;
5875
6515
  addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
5876
6516
  groupId: z.ZodOptional<z.ZodString>;
@@ -5890,6 +6530,16 @@ export declare const optionModelRequestSchema: z.ZodObject<{
5890
6530
  maxLength: z.ZodNumber;
5891
6531
  required: z.ZodDefault<z.ZodBoolean>;
5892
6532
  usable: z.ZodDefault<z.ZodBoolean>;
6533
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6534
+ type: z.ZodOptional<z.ZodEnum<{
6535
+ number: "number";
6536
+ date: "date";
6537
+ text: "text";
6538
+ select: "select";
6539
+ datetime: "datetime";
6540
+ image: "image";
6541
+ }>>;
6542
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
5893
6543
  }, z.core.$strip>>>;
5894
6544
  optionSort: z.ZodOptional<z.ZodEnum<{
5895
6545
  REGISTERED: "REGISTERED";
@@ -5924,6 +6574,7 @@ export declare const optionModelSchema: z.ZodObject<{
5924
6574
  weightGram: z.ZodNullable<z.ZodNumber>;
5925
6575
  sellerCode: z.ZodNullable<z.ZodString>;
5926
6576
  usable: z.ZodBoolean;
6577
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5927
6578
  hasOrders: z.ZodOptional<z.ZodBoolean>;
5928
6579
  }, z.core.$strip>>;
5929
6580
  addonGroups: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -5947,6 +6598,9 @@ export declare const optionModelSchema: z.ZodObject<{
5947
6598
  required: z.ZodBoolean;
5948
6599
  usable: z.ZodBoolean;
5949
6600
  sortOrder: z.ZodNumber;
6601
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6602
+ type: z.ZodOptional<z.ZodString>;
6603
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
5950
6604
  }, z.core.$strip>>>>;
5951
6605
  optionSort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
5952
6606
  REGISTERED: "REGISTERED";
@@ -5990,10 +6644,26 @@ export declare const productCreateRequestSchema: z.ZodObject<{
5990
6644
  shippingAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5991
6645
  returnAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5992
6646
  }, z.core.$strict>>;
6647
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6648
+ CARRIER: "CARRIER";
6649
+ DIRECT: "DIRECT";
6650
+ PICKUP: "PICKUP";
6651
+ PROVIDED: "PROVIDED";
6652
+ }>>>;
5993
6653
  }, z.core.$strict>, z.ZodObject<{
5994
6654
  type: z.ZodLiteral<"MANUAL">;
6655
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6656
+ CARRIER: "CARRIER";
6657
+ DIRECT: "DIRECT";
6658
+ PICKUP: "PICKUP";
6659
+ PROVIDED: "PROVIDED";
6660
+ }>>>;
5995
6661
  }, z.core.$strict>], "type">>;
5996
6662
  sourceOptionSetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
6663
+ inventoryMode: z.ZodOptional<z.ZodEnum<{
6664
+ STANDARD: "STANDARD";
6665
+ DATED: "DATED";
6666
+ }>>;
5997
6667
  optionGroups: z.ZodDefault<z.ZodArray<z.ZodObject<{
5998
6668
  groupId: z.ZodOptional<z.ZodString>;
5999
6669
  name: z.ZodString;
@@ -6013,6 +6683,7 @@ export declare const productCreateRequestSchema: z.ZodObject<{
6013
6683
  weightGram: z.ZodOptional<z.ZodNumber>;
6014
6684
  sellerCode: z.ZodOptional<z.ZodString>;
6015
6685
  usable: z.ZodDefault<z.ZodBoolean>;
6686
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
6016
6687
  }, z.core.$strip>>;
6017
6688
  addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
6018
6689
  groupId: z.ZodOptional<z.ZodString>;
@@ -6032,6 +6703,16 @@ export declare const productCreateRequestSchema: z.ZodObject<{
6032
6703
  maxLength: z.ZodNumber;
6033
6704
  required: z.ZodDefault<z.ZodBoolean>;
6034
6705
  usable: z.ZodDefault<z.ZodBoolean>;
6706
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6707
+ type: z.ZodOptional<z.ZodEnum<{
6708
+ number: "number";
6709
+ date: "date";
6710
+ text: "text";
6711
+ select: "select";
6712
+ datetime: "datetime";
6713
+ image: "image";
6714
+ }>>;
6715
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
6035
6716
  }, z.core.$strip>>>;
6036
6717
  optionSort: z.ZodOptional<z.ZodEnum<{
6037
6718
  REGISTERED: "REGISTERED";
@@ -6076,10 +6757,26 @@ export declare const productReplaceRequestSchema: z.ZodObject<{
6076
6757
  shippingAddressId: z.ZodNullable<z.ZodString>;
6077
6758
  returnAddressId: z.ZodNullable<z.ZodString>;
6078
6759
  }, z.core.$strict>;
6760
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6761
+ CARRIER: "CARRIER";
6762
+ DIRECT: "DIRECT";
6763
+ PICKUP: "PICKUP";
6764
+ PROVIDED: "PROVIDED";
6765
+ }>>>;
6079
6766
  }, z.core.$strict>, z.ZodObject<{
6080
6767
  type: z.ZodLiteral<"MANUAL">;
6768
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6769
+ CARRIER: "CARRIER";
6770
+ DIRECT: "DIRECT";
6771
+ PICKUP: "PICKUP";
6772
+ PROVIDED: "PROVIDED";
6773
+ }>>>;
6081
6774
  }, z.core.$strict>], "type">>;
6082
6775
  sourceOptionSetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
6776
+ inventoryMode: z.ZodOptional<z.ZodEnum<{
6777
+ STANDARD: "STANDARD";
6778
+ DATED: "DATED";
6779
+ }>>;
6083
6780
  optionGroups: z.ZodDefault<z.ZodArray<z.ZodObject<{
6084
6781
  groupId: z.ZodOptional<z.ZodString>;
6085
6782
  name: z.ZodString;
@@ -6099,6 +6796,7 @@ export declare const productReplaceRequestSchema: z.ZodObject<{
6099
6796
  weightGram: z.ZodOptional<z.ZodNumber>;
6100
6797
  sellerCode: z.ZodOptional<z.ZodString>;
6101
6798
  usable: z.ZodDefault<z.ZodBoolean>;
6799
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
6102
6800
  }, z.core.$strip>>;
6103
6801
  addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
6104
6802
  groupId: z.ZodOptional<z.ZodString>;
@@ -6118,6 +6816,16 @@ export declare const productReplaceRequestSchema: z.ZodObject<{
6118
6816
  maxLength: z.ZodNumber;
6119
6817
  required: z.ZodDefault<z.ZodBoolean>;
6120
6818
  usable: z.ZodDefault<z.ZodBoolean>;
6819
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6820
+ type: z.ZodOptional<z.ZodEnum<{
6821
+ number: "number";
6822
+ date: "date";
6823
+ text: "text";
6824
+ select: "select";
6825
+ datetime: "datetime";
6826
+ image: "image";
6827
+ }>>;
6828
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
6121
6829
  }, z.core.$strip>>>;
6122
6830
  optionSort: z.ZodOptional<z.ZodEnum<{
6123
6831
  REGISTERED: "REGISTERED";
@@ -6170,8 +6878,20 @@ export declare const productPatchRequestSchema: z.ZodObject<{
6170
6878
  shippingAddressId: z.ZodNullable<z.ZodString>;
6171
6879
  returnAddressId: z.ZodNullable<z.ZodString>;
6172
6880
  }, z.core.$strict>;
6881
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6882
+ CARRIER: "CARRIER";
6883
+ DIRECT: "DIRECT";
6884
+ PICKUP: "PICKUP";
6885
+ PROVIDED: "PROVIDED";
6886
+ }>>>;
6173
6887
  }, z.core.$strict>, z.ZodObject<{
6174
6888
  type: z.ZodLiteral<"MANUAL">;
6889
+ methods: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6890
+ CARRIER: "CARRIER";
6891
+ DIRECT: "DIRECT";
6892
+ PICKUP: "PICKUP";
6893
+ PROVIDED: "PROVIDED";
6894
+ }>>>;
6175
6895
  }, z.core.$strict>], "type">>;
6176
6896
  refundPolicy: z.ZodOptional<z.ZodNullable<z.ZodObject<{
6177
6897
  preShipmentDeliveryFeeRefund: z.ZodOptional<z.ZodBoolean>;
@@ -6269,6 +6989,9 @@ export declare const savedCustomInputSchema: z.ZodObject<{
6269
6989
  placeholder: z.ZodNullable<z.ZodString>;
6270
6990
  maxLength: z.ZodNumber;
6271
6991
  required: z.ZodBoolean;
6992
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6993
+ type: z.ZodOptional<z.ZodString>;
6994
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
6272
6995
  }, z.core.$strip>;
6273
6996
  export type SavedCustomInput = z.infer<typeof savedCustomInputSchema>;
6274
6997
  export declare const savedOptionSetSchema: z.ZodObject<{
@@ -6294,6 +7017,9 @@ export declare const savedOptionSetSchema: z.ZodObject<{
6294
7017
  placeholder: z.ZodNullable<z.ZodString>;
6295
7018
  maxLength: z.ZodNumber;
6296
7019
  required: z.ZodBoolean;
7020
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
7021
+ type: z.ZodOptional<z.ZodString>;
7022
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
6297
7023
  }, z.core.$strip>>;
6298
7024
  importedProductCount: z.ZodNumber;
6299
7025
  createdAt: z.ZodString;
@@ -6322,6 +7048,16 @@ export declare const savedCustomInputRequestSchema: z.ZodObject<{
6322
7048
  placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6323
7049
  maxLength: z.ZodNumber;
6324
7050
  required: z.ZodDefault<z.ZodBoolean>;
7051
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
7052
+ type: z.ZodOptional<z.ZodEnum<{
7053
+ number: "number";
7054
+ date: "date";
7055
+ text: "text";
7056
+ select: "select";
7057
+ datetime: "datetime";
7058
+ image: "image";
7059
+ }>>;
7060
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
6325
7061
  }, z.core.$strip>;
6326
7062
  /**
6327
7063
  * 저장 옵션 만들기·수정 본문. 조합 옵션명은 최대 `MAX_OPTION_GROUPS`개, 추가 선택은 최대 `MAX_ADDON_GROUPS`개이고
@@ -6352,6 +7088,16 @@ export declare const savedOptionSetRequestSchema: z.ZodObject<{
6352
7088
  placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6353
7089
  maxLength: z.ZodNumber;
6354
7090
  required: z.ZodDefault<z.ZodBoolean>;
7091
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
7092
+ type: z.ZodOptional<z.ZodEnum<{
7093
+ number: "number";
7094
+ date: "date";
7095
+ text: "text";
7096
+ select: "select";
7097
+ datetime: "datetime";
7098
+ image: "image";
7099
+ }>>;
7100
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
6355
7101
  }, z.core.$strip>>>;
6356
7102
  }, z.core.$strip>;
6357
7103
  export type SavedOptionSetRequest = z.infer<typeof savedOptionSetRequestSchema>;
@@ -6395,6 +7141,9 @@ export declare const savedOptionSetFromProductResultSchema: z.ZodObject<{
6395
7141
  placeholder: z.ZodNullable<z.ZodString>;
6396
7142
  maxLength: z.ZodNumber;
6397
7143
  required: z.ZodBoolean;
7144
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
7145
+ type: z.ZodOptional<z.ZodString>;
7146
+ options: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
6398
7147
  }, z.core.$strip>>;
6399
7148
  importedProductCount: z.ZodNumber;
6400
7149
  createdAt: z.ZodString;
@@ -6437,6 +7186,67 @@ export declare const savedOptionSetListQuerySchema: z.ZodObject<{
6437
7186
  }>>;
6438
7187
  }, z.core.$strip>;
6439
7188
  //#endregion
7189
+ //#region src/schemas/stay.d.ts
7190
+ /**
7191
+ * 날짜별 재고·가격(이슈 #118) — 숙박·회차처럼 날짜마다 재고와 가격이 다른 상품. 상품 `inventoryMode: "DATED"`이면 조합(객실) × 날짜
7192
+ * 달력이 재고·가격의 원천이고, 주문서 줄은 기간(`stay`)을 받는다. 날짜는 한국 날짜 `YYYY-MM-DD`다.
7193
+ */
7194
+ /** 한국 날짜 */
7195
+ export declare const calendarDateSchema: z.ZodString;
7196
+ /** 한 번에 받는 최대 박수 */
7197
+ export declare const MAX_STAY_NIGHTS = 30;
7198
+ /** 달력 한 번 조회·설정 최대 일수 */
7199
+ export declare const MAX_CALENDAR_DAYS = 400;
7200
+ export declare const inventoryModeSchema: z.ZodEnum<{
7201
+ STANDARD: "STANDARD";
7202
+ DATED: "DATED";
7203
+ }>;
7204
+ export type InventoryMode = z.infer<typeof inventoryModeSchema>;
7205
+ /** 숙박 기간 — 체크인 날부터 체크아웃 전날까지가 박이다 */
7206
+ export declare const stayRangeSchema: z.ZodObject<{
7207
+ checkIn: z.ZodString;
7208
+ checkOut: z.ZodString;
7209
+ }, z.core.$strip>;
7210
+ export type StayRange = z.infer<typeof stayRangeSchema>;
7211
+ /** 주문 시점 숙박 — 박마다 그때 가격 */
7212
+ export declare const staySnapshotSchema: z.ZodObject<{
7213
+ checkIn: z.ZodString;
7214
+ checkOut: z.ZodString;
7215
+ nights: z.ZodArray<z.ZodObject<{
7216
+ date: z.ZodString;
7217
+ price: z.ZodNumber;
7218
+ }, z.core.$strip>>;
7219
+ }, z.core.$strip>;
7220
+ export type StaySnapshot = z.infer<typeof staySnapshotSchema>;
7221
+ /** 체크인~체크아웃 전날 날짜 목록. 형식이 틀리거나 체크아웃이 체크인 이하면 빈 목록 */
7222
+ export declare function nightsOf(range: StayRange): string[];
7223
+ /** 관리 달력 한 칸 */
7224
+ export declare const calendarDaySchema: z.ZodObject<{
7225
+ variantId: z.ZodString;
7226
+ date: z.ZodString;
7227
+ stock: z.ZodNumber;
7228
+ price: z.ZodNullable<z.ZodNumber>;
7229
+ }, z.core.$strip>;
7230
+ export type CalendarDay = z.infer<typeof calendarDaySchema>;
7231
+ export declare const calendarQuerySchema: z.ZodObject<{
7232
+ variantId: z.ZodOptional<z.ZodString>;
7233
+ from: z.ZodString;
7234
+ to: z.ZodString;
7235
+ }, z.core.$strip>;
7236
+ /**
7237
+ * 달력 설정 — 기간의 날짜마다 재고·가격을 덮어쓴다(없는 날은 만든다). `stock`·`price`는 준 것만 바꾸고, `price: null`은 조합 가격으로
7238
+ * 되돌린다. `daysOfWeek`(0=일~6=토)를 주면 그 요일만 바꾼다
7239
+ */
7240
+ export declare const setCalendarRequestSchema: z.ZodObject<{
7241
+ variantIds: z.ZodArray<z.ZodString>;
7242
+ from: z.ZodString;
7243
+ to: z.ZodString;
7244
+ stock: z.ZodOptional<z.ZodNumber>;
7245
+ price: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
7246
+ daysOfWeek: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
7247
+ }, z.core.$strip>;
7248
+ export type SetCalendarRequest = z.input<typeof setCalendarRequestSchema>;
7249
+ //#endregion
6440
7250
  //#region src/schemas/store.d.ts
6441
7251
  /**
6442
7252
  * 상점 코드 규칙 — 스토어프론트 API가 테넌트를 가르는 값이다(`X-Store-Code` 헤더).
@@ -8080,10 +8890,12 @@ export type StorefrontSourceReplaced = z.infer<typeof storefrontSourceReplacedSc
8080
8890
  *
8081
8891
  * - `product-image`: 상품 목록·상세의 상품 이미지. 목록 썸네일로 쓰이므로 정지 이미지만 받는다.
8082
8892
  * - `description`: 상세설명 본문에 삽입하는 미디어. 동영상과 svg도 받는다.
8893
+ * - `flow-attachment`: 주문 흐름 행동의 첨부(시안 등, 이슈 #115). 구매자에게 보이므로 정지 이미지와 PDF만 받는다.
8083
8894
  */
8084
8895
  export declare const uploadPurposeSchema: z.ZodEnum<{
8085
8896
  "product-image": "product-image";
8086
8897
  description: "description";
8898
+ "flow-attachment": "flow-attachment";
8087
8899
  }>;
8088
8900
  export type UploadPurpose = z.infer<typeof uploadPurposeSchema>;
8089
8901
  export interface UploadPurposeLimit {
@@ -8123,6 +8935,7 @@ export declare const uploadRequestSchema: z.ZodObject<{
8123
8935
  purpose: z.ZodDefault<z.ZodEnum<{
8124
8936
  "product-image": "product-image";
8125
8937
  description: "description";
8938
+ "flow-attachment": "flow-attachment";
8126
8939
  }>>;
8127
8940
  size: z.ZodOptional<z.ZodNumber>;
8128
8941
  }, z.core.$strip>;
@@ -8397,6 +9210,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8397
9210
  weightGram: number | null;
8398
9211
  sellerCode: string | null;
8399
9212
  usable: boolean;
9213
+ attributes?: Record<string, string> | undefined;
8400
9214
  hasOrders?: boolean | undefined;
8401
9215
  }[];
8402
9216
  addonGroups: {
@@ -8420,6 +9234,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8420
9234
  required: boolean;
8421
9235
  usable: boolean;
8422
9236
  sortOrder: number;
9237
+ key?: string | null | undefined;
9238
+ type?: string | undefined;
9239
+ options?: string[] | null | undefined;
8423
9240
  }[];
8424
9241
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8425
9242
  fulfillment: UnknownFulfillment | {
@@ -8431,8 +9248,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
8431
9248
  shippingAddressId: string | null;
8432
9249
  returnAddressId: string | null;
8433
9250
  };
9251
+ methods?: string[] | undefined;
8434
9252
  } | {
8435
9253
  type: "MANUAL";
9254
+ methods?: string[] | undefined;
8436
9255
  };
8437
9256
  fulfillmentTypeLocked: boolean;
8438
9257
  refundPolicy: {
@@ -8452,6 +9271,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8452
9271
  attributeId: string;
8453
9272
  value: string;
8454
9273
  }[] | undefined;
9274
+ inventoryMode?: string | undefined;
8455
9275
  discount?: {
8456
9276
  productId: string;
8457
9277
  discountType: "RATE" | "AMOUNT";
@@ -8497,6 +9317,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8497
9317
  weightGram: number | null;
8498
9318
  sellerCode: string | null;
8499
9319
  usable: boolean;
9320
+ attributes?: Record<string, string> | undefined;
8500
9321
  hasOrders?: boolean | undefined;
8501
9322
  }[];
8502
9323
  addonGroups: {
@@ -8520,6 +9341,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8520
9341
  required: boolean;
8521
9342
  usable: boolean;
8522
9343
  sortOrder: number;
9344
+ key?: string | null | undefined;
9345
+ type?: string | undefined;
9346
+ options?: string[] | null | undefined;
8523
9347
  }[];
8524
9348
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8525
9349
  fulfillment: UnknownFulfillment | {
@@ -8531,8 +9355,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
8531
9355
  shippingAddressId: string | null;
8532
9356
  returnAddressId: string | null;
8533
9357
  };
9358
+ methods?: string[] | undefined;
8534
9359
  } | {
8535
9360
  type: "MANUAL";
9361
+ methods?: string[] | undefined;
8536
9362
  };
8537
9363
  fulfillmentTypeLocked: boolean;
8538
9364
  refundPolicy: {
@@ -8552,6 +9378,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8552
9378
  attributeId: string;
8553
9379
  value: string;
8554
9380
  }[] | undefined;
9381
+ inventoryMode?: string | undefined;
8555
9382
  discount?: {
8556
9383
  productId: string;
8557
9384
  discountType: "RATE" | "AMOUNT";
@@ -8597,6 +9424,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8597
9424
  weightGram: number | null;
8598
9425
  sellerCode: string | null;
8599
9426
  usable: boolean;
9427
+ attributes?: Record<string, string> | undefined;
8600
9428
  hasOrders?: boolean | undefined;
8601
9429
  }[];
8602
9430
  addonGroups: {
@@ -8620,6 +9448,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8620
9448
  required: boolean;
8621
9449
  usable: boolean;
8622
9450
  sortOrder: number;
9451
+ key?: string | null | undefined;
9452
+ type?: string | undefined;
9453
+ options?: string[] | null | undefined;
8623
9454
  }[];
8624
9455
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8625
9456
  fulfillment: UnknownFulfillment | {
@@ -8631,8 +9462,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
8631
9462
  shippingAddressId: string | null;
8632
9463
  returnAddressId: string | null;
8633
9464
  };
9465
+ methods?: string[] | undefined;
8634
9466
  } | {
8635
9467
  type: "MANUAL";
9468
+ methods?: string[] | undefined;
8636
9469
  };
8637
9470
  fulfillmentTypeLocked: boolean;
8638
9471
  refundPolicy: {
@@ -8652,6 +9485,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8652
9485
  attributeId: string;
8653
9486
  value: string;
8654
9487
  }[] | undefined;
9488
+ inventoryMode?: string | undefined;
8655
9489
  discount?: {
8656
9490
  productId: string;
8657
9491
  discountType: "RATE" | "AMOUNT";
@@ -8699,6 +9533,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8699
9533
  weightGram: number | null;
8700
9534
  sellerCode: string | null;
8701
9535
  usable: boolean;
9536
+ attributes?: Record<string, string> | undefined;
8702
9537
  hasOrders?: boolean | undefined;
8703
9538
  }[];
8704
9539
  addonGroups: {
@@ -8722,6 +9557,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8722
9557
  required: boolean;
8723
9558
  usable: boolean;
8724
9559
  sortOrder: number;
9560
+ key?: string | null | undefined;
9561
+ type?: string | undefined;
9562
+ options?: string[] | null | undefined;
8725
9563
  }[];
8726
9564
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8727
9565
  }>;
@@ -8753,6 +9591,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8753
9591
  weightGram: number | null;
8754
9592
  sellerCode: string | null;
8755
9593
  usable: boolean;
9594
+ attributes?: Record<string, string> | undefined;
8756
9595
  hasOrders?: boolean | undefined;
8757
9596
  }[];
8758
9597
  addonGroups: {
@@ -8776,6 +9615,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8776
9615
  required: boolean;
8777
9616
  usable: boolean;
8778
9617
  sortOrder: number;
9618
+ key?: string | null | undefined;
9619
+ type?: string | undefined;
9620
+ options?: string[] | null | undefined;
8779
9621
  }[];
8780
9622
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8781
9623
  }>;
@@ -8801,6 +9643,17 @@ export declare function createStoreClient(options: StoreClientOptions): {
8801
9643
  endAt: string | null;
8802
9644
  }>;
8803
9645
  removeDiscount: (productId: string) => Promise<void>;
9646
+ /** 날짜별 재고 상품(`inventoryMode: "DATED"`, 이슈 #118)의 기간(포함) 달력. 없는 날은 싣지 않는다 */
9647
+ getCalendar: (productId: string, query: z.input<typeof calendarQuerySchema>) => Promise<{
9648
+ variantId: string;
9649
+ date: string;
9650
+ stock: number;
9651
+ price: number | null;
9652
+ }[]>;
9653
+ /** 기간의 날짜마다 조합별 재고·가격을 덮어쓴다. `price: null`은 조합 가격으로 되돌린다 */
9654
+ setCalendar: (productId: string, body: SetCalendarRequest) => Promise<{
9655
+ updated: number;
9656
+ }>;
8804
9657
  };
8805
9658
  /**
8806
9659
  * 저장 옵션 (이슈 #59) — 자주 쓰는 옵션 구성. 불러오기는 복사라 저장 옵션을 고쳐도 불러온 상품은 바뀌지 않는다.
@@ -8830,6 +9683,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8830
9683
  placeholder: string | null;
8831
9684
  maxLength: number;
8832
9685
  required: boolean;
9686
+ key?: string | null | undefined;
9687
+ type?: string | undefined;
9688
+ options?: string[] | null | undefined;
8833
9689
  }[];
8834
9690
  importedProductCount: number;
8835
9691
  createdAt: string;
@@ -8854,6 +9710,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8854
9710
  placeholder: string | null;
8855
9711
  maxLength: number;
8856
9712
  required: boolean;
9713
+ key?: string | null | undefined;
9714
+ type?: string | undefined;
9715
+ options?: string[] | null | undefined;
8857
9716
  }[];
8858
9717
  importedProductCount: number;
8859
9718
  createdAt: string;
@@ -8878,6 +9737,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8878
9737
  placeholder: string | null;
8879
9738
  maxLength: number;
8880
9739
  required: boolean;
9740
+ key?: string | null | undefined;
9741
+ type?: string | undefined;
9742
+ options?: string[] | null | undefined;
8881
9743
  }[];
8882
9744
  importedProductCount: number;
8883
9745
  createdAt: string;
@@ -8902,6 +9764,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8902
9764
  placeholder: string | null;
8903
9765
  maxLength: number;
8904
9766
  required: boolean;
9767
+ key?: string | null | undefined;
9768
+ type?: string | undefined;
9769
+ options?: string[] | null | undefined;
8905
9770
  }[];
8906
9771
  importedProductCount: number;
8907
9772
  createdAt: string;
@@ -8928,6 +9793,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8928
9793
  placeholder: string | null;
8929
9794
  maxLength: number;
8930
9795
  required: boolean;
9796
+ key?: string | null | undefined;
9797
+ type?: string | undefined;
9798
+ options?: string[] | null | undefined;
8931
9799
  }[];
8932
9800
  importedProductCount: number;
8933
9801
  createdAt: string;
@@ -9497,6 +10365,8 @@ export declare function createStoreClient(options: StoreClientOptions): {
9497
10365
  customInputs: {
9498
10366
  label: string;
9499
10367
  value: string;
10368
+ key?: string | null | undefined;
10369
+ type?: string | undefined;
9500
10370
  }[];
9501
10371
  sellerCode: string | null;
9502
10372
  fulfillmentSnapshot: UnknownFulfillment | {
@@ -9505,8 +10375,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
9505
10375
  bundleKey: string | null;
9506
10376
  returnAddressId: string | null;
9507
10377
  };
10378
+ method?: string | undefined;
10379
+ pickupLocation?: {
10380
+ locationId: string;
10381
+ name: string;
10382
+ address: string;
10383
+ phone: string | null;
10384
+ hours: string | null;
10385
+ } | undefined;
9508
10386
  } | {
9509
10387
  type: "MANUAL";
10388
+ method?: string | undefined;
10389
+ pickupLocation?: {
10390
+ locationId: string;
10391
+ name: string;
10392
+ address: string;
10393
+ phone: string | null;
10394
+ hours: string | null;
10395
+ } | undefined;
9510
10396
  };
9511
10397
  quantity: number;
9512
10398
  canceledQuantity: number;
@@ -9532,6 +10418,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
9532
10418
  lastChangedAt: string;
9533
10419
  lastChangedType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED";
9534
10420
  testPayment: boolean;
10421
+ stay?: {
10422
+ checkIn: string;
10423
+ checkOut: string;
10424
+ nights: {
10425
+ date: string;
10426
+ price: number;
10427
+ }[];
10428
+ } | undefined;
9535
10429
  }[];
9536
10430
  }>;
9537
10431
  /**
@@ -9584,6 +10478,8 @@ export declare function createStoreClient(options: StoreClientOptions): {
9584
10478
  customInputs: {
9585
10479
  label: string;
9586
10480
  value: string;
10481
+ key?: string | null | undefined;
10482
+ type?: string | undefined;
9587
10483
  }[];
9588
10484
  sellerCode: string | null;
9589
10485
  fulfillmentSnapshot: UnknownFulfillment | {
@@ -9592,8 +10488,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
9592
10488
  bundleKey: string | null;
9593
10489
  returnAddressId: string | null;
9594
10490
  };
10491
+ method?: string | undefined;
10492
+ pickupLocation?: {
10493
+ locationId: string;
10494
+ name: string;
10495
+ address: string;
10496
+ phone: string | null;
10497
+ hours: string | null;
10498
+ } | undefined;
9595
10499
  } | {
9596
10500
  type: "MANUAL";
10501
+ method?: string | undefined;
10502
+ pickupLocation?: {
10503
+ locationId: string;
10504
+ name: string;
10505
+ address: string;
10506
+ phone: string | null;
10507
+ hours: string | null;
10508
+ } | undefined;
9597
10509
  };
9598
10510
  quantity: number;
9599
10511
  canceledQuantity: number;
@@ -9619,6 +10531,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
9619
10531
  lastChangedAt: string;
9620
10532
  lastChangedType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED";
9621
10533
  testPayment: boolean;
10534
+ stay?: {
10535
+ checkIn: string;
10536
+ checkOut: string;
10537
+ nights: {
10538
+ date: string;
10539
+ price: number;
10540
+ }[];
10541
+ } | undefined;
9622
10542
  }[];
9623
10543
  }>;
9624
10544
  confirm: (orderItemId: string, idempotencyKey?: string) => Promise<void>;
@@ -9655,7 +10575,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
9655
10575
  }>;
9656
10576
  dispatch: (orderItemId: string, body: DispatchRequest, idempotencyKey?: string) => Promise<{
9657
10577
  orderItemId: string;
9658
- deliveryMethod: "COURIER" | "DIRECT" | "QUICK" | "NOTHING";
10578
+ deliveryMethod: "DIRECT" | "COURIER" | "QUICK" | "NOTHING";
9659
10579
  carrierCode: string | null;
9660
10580
  carrierName: string | null;
9661
10581
  trackingNumber: string | null;
@@ -9700,6 +10620,8 @@ export declare function createStoreClient(options: StoreClientOptions): {
9700
10620
  customInputs: {
9701
10621
  label: string;
9702
10622
  value: string;
10623
+ key?: string | null | undefined;
10624
+ type?: string | undefined;
9703
10625
  }[];
9704
10626
  sellerCode: string | null;
9705
10627
  fulfillmentSnapshot: UnknownFulfillment | {
@@ -9708,8 +10630,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
9708
10630
  bundleKey: string | null;
9709
10631
  returnAddressId: string | null;
9710
10632
  };
10633
+ method?: string | undefined;
10634
+ pickupLocation?: {
10635
+ locationId: string;
10636
+ name: string;
10637
+ address: string;
10638
+ phone: string | null;
10639
+ hours: string | null;
10640
+ } | undefined;
9711
10641
  } | {
9712
10642
  type: "MANUAL";
10643
+ method?: string | undefined;
10644
+ pickupLocation?: {
10645
+ locationId: string;
10646
+ name: string;
10647
+ address: string;
10648
+ phone: string | null;
10649
+ hours: string | null;
10650
+ } | undefined;
9713
10651
  };
9714
10652
  quantity: number;
9715
10653
  canceledQuantity: number;
@@ -9735,6 +10673,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
9735
10673
  lastChangedAt: string;
9736
10674
  lastChangedType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED";
9737
10675
  testPayment: boolean;
10676
+ stay?: {
10677
+ checkIn: string;
10678
+ checkOut: string;
10679
+ nights: {
10680
+ date: string;
10681
+ price: number;
10682
+ }[];
10683
+ } | undefined;
9738
10684
  }>;
9739
10685
  /** 배송완료 일괄 처리 — 항목별 부분 성공이다 */
9740
10686
  markDeliveredBulk: (orderItemIds: string[], idempotencyKey?: string) => Promise<{
@@ -9770,6 +10716,8 @@ export declare function createStoreClient(options: StoreClientOptions): {
9770
10716
  customInputs: {
9771
10717
  label: string;
9772
10718
  value: string;
10719
+ key?: string | null | undefined;
10720
+ type?: string | undefined;
9773
10721
  }[];
9774
10722
  sellerCode: string | null;
9775
10723
  fulfillmentSnapshot: UnknownFulfillment | {
@@ -9778,8 +10726,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
9778
10726
  bundleKey: string | null;
9779
10727
  returnAddressId: string | null;
9780
10728
  };
10729
+ method?: string | undefined;
10730
+ pickupLocation?: {
10731
+ locationId: string;
10732
+ name: string;
10733
+ address: string;
10734
+ phone: string | null;
10735
+ hours: string | null;
10736
+ } | undefined;
9781
10737
  } | {
9782
10738
  type: "MANUAL";
10739
+ method?: string | undefined;
10740
+ pickupLocation?: {
10741
+ locationId: string;
10742
+ name: string;
10743
+ address: string;
10744
+ phone: string | null;
10745
+ hours: string | null;
10746
+ } | undefined;
9783
10747
  };
9784
10748
  quantity: number;
9785
10749
  canceledQuantity: number;
@@ -9805,6 +10769,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
9805
10769
  lastChangedAt: string;
9806
10770
  lastChangedType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED";
9807
10771
  testPayment: boolean;
10772
+ stay?: {
10773
+ checkIn: string;
10774
+ checkOut: string;
10775
+ nights: {
10776
+ date: string;
10777
+ price: number;
10778
+ }[];
10779
+ } | undefined;
9808
10780
  }>;
9809
10781
  /** 제공 처리 일괄 — 항목별 부분 성공이다 */
9810
10782
  fulfillBulk: (orderItemIds: string[], body?: FulfillRequest, idempotencyKey?: string) => Promise<{
@@ -9819,7 +10791,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
9819
10791
  }>;
9820
10792
  getDelivery: (orderItemId: string) => Promise<{
9821
10793
  orderItemId: string;
9822
- deliveryMethod: "COURIER" | "DIRECT" | "QUICK" | "NOTHING";
10794
+ deliveryMethod: "DIRECT" | "COURIER" | "QUICK" | "NOTHING";
9823
10795
  carrierCode: string | null;
9824
10796
  carrierName: string | null;
9825
10797
  trackingNumber: string | null;
@@ -9840,6 +10812,370 @@ export declare function createStoreClient(options: StoreClientOptions): {
9840
10812
  stage: string | null;
9841
10813
  }[] | undefined;
9842
10814
  }>;
10815
+ /** `GET /order-items/{id}/flow` — 커머스 플로우의 지금 상태·할 수 있는 행동·타이머(#115). 스코프 `order:r` */
10816
+ getFlow: (orderItemId: string) => Promise<{
10817
+ orderItemId: string;
10818
+ flow: {
10819
+ flowId: string;
10820
+ version: number;
10821
+ };
10822
+ flowState: {
10823
+ key: string;
10824
+ label: string;
10825
+ enteredAt: string;
10826
+ fields: Record<string, string | number | boolean | string[] | null>;
10827
+ coreStatus?: "PAID" | "CANCELED" | "PAYMENT_WAITING" | "CONFIRMED" | "DISPATCHED" | "DELIVERING" | "DELIVERED" | "PURCHASE_DECIDED" | undefined;
10828
+ claimStatus?: "REJECTED" | "REQUESTED" | "HELD" | "COLLECTING" | "COLLECTED" | "REDELIVERING" | "APPROVED" | "COMPLETED" | "WITHDRAWN" | undefined;
10829
+ message?: string | undefined;
10830
+ deadlineAt?: string | undefined;
10831
+ attachments?: string[] | undefined;
10832
+ progress?: boolean | undefined;
10833
+ };
10834
+ actions: {
10835
+ key: string;
10836
+ label: string;
10837
+ mode: "REQUEST" | "INSTANT" | "VIEW";
10838
+ enabled: boolean;
10839
+ disabled?: {
10840
+ reason: string;
10841
+ message?: string | undefined;
10842
+ } | undefined;
10843
+ availableUntil?: string | undefined;
10844
+ subflow?: string | undefined;
10845
+ input?: {
10846
+ key: string;
10847
+ type: string;
10848
+ required: boolean;
10849
+ label: string;
10850
+ maxLength?: number | undefined;
10851
+ maxFiles?: number | undefined;
10852
+ options?: (string | number)[] | undefined;
10853
+ }[] | undefined;
10854
+ partialQuantity?: boolean | "UNIT" | undefined;
10855
+ }[];
10856
+ timers: {
10857
+ key: string;
10858
+ dueAt: string;
10859
+ paused: boolean;
10860
+ }[];
10861
+ ended: boolean;
10862
+ }>;
10863
+ /**
10864
+ * `POST /order-items/{id}/actions/{key}` — `getFlow().actions`에 켜진 행동을 실행한다(#115). 묶음 진행이면
10865
+ * `affectedOrderItemIds`에 함께 움직인 주문상품이 온다. 에러: 409 `ACTION_NOT_AVAILABLE`
10866
+ */
10867
+ act: (orderItemId: string, key: string, input?: Record<string, unknown>, idempotencyKey?: string) => Promise<{
10868
+ status: "COMPLETED";
10869
+ flowState: {
10870
+ key: string;
10871
+ label: string;
10872
+ enteredAt: string;
10873
+ fields: Record<string, string | number | boolean | string[] | null>;
10874
+ coreStatus?: "PAID" | "CANCELED" | "PAYMENT_WAITING" | "CONFIRMED" | "DISPATCHED" | "DELIVERING" | "DELIVERED" | "PURCHASE_DECIDED" | undefined;
10875
+ claimStatus?: "REJECTED" | "REQUESTED" | "HELD" | "COLLECTING" | "COLLECTED" | "REDELIVERING" | "APPROVED" | "COMPLETED" | "WITHDRAWN" | undefined;
10876
+ message?: string | undefined;
10877
+ deadlineAt?: string | undefined;
10878
+ attachments?: string[] | undefined;
10879
+ progress?: boolean | undefined;
10880
+ };
10881
+ actions: {
10882
+ key: string;
10883
+ label: string;
10884
+ mode: "REQUEST" | "INSTANT" | "VIEW";
10885
+ enabled: boolean;
10886
+ disabled?: {
10887
+ reason: string;
10888
+ message?: string | undefined;
10889
+ } | undefined;
10890
+ availableUntil?: string | undefined;
10891
+ subflow?: string | undefined;
10892
+ input?: {
10893
+ key: string;
10894
+ type: string;
10895
+ required: boolean;
10896
+ label: string;
10897
+ maxLength?: number | undefined;
10898
+ maxFiles?: number | undefined;
10899
+ options?: (string | number)[] | undefined;
10900
+ }[] | undefined;
10901
+ partialQuantity?: boolean | "UNIT" | undefined;
10902
+ }[];
10903
+ affectedOrderItemIds: string[];
10904
+ }>;
10905
+ /**
10906
+ * `POST /order-items/{id}/events/{key}` — 현장 단말·연동의 상점 사건(`custom.<이름>`)을 플로우에 넣는다(#115).
10907
+ * 에러: 400 `FLOW_EVENT_KEY_INVALID`, 409 `FLOW_EVENT_NOT_ACCEPTED`
10908
+ */
10909
+ emitEvent: (orderItemId: string, key: `custom.${string}`, input?: Record<string, unknown>, idempotencyKey?: string) => Promise<{
10910
+ status: "COMPLETED";
10911
+ flowState: {
10912
+ key: string;
10913
+ label: string;
10914
+ enteredAt: string;
10915
+ fields: Record<string, string | number | boolean | string[] | null>;
10916
+ coreStatus?: "PAID" | "CANCELED" | "PAYMENT_WAITING" | "CONFIRMED" | "DISPATCHED" | "DELIVERING" | "DELIVERED" | "PURCHASE_DECIDED" | undefined;
10917
+ claimStatus?: "REJECTED" | "REQUESTED" | "HELD" | "COLLECTING" | "COLLECTED" | "REDELIVERING" | "APPROVED" | "COMPLETED" | "WITHDRAWN" | undefined;
10918
+ message?: string | undefined;
10919
+ deadlineAt?: string | undefined;
10920
+ attachments?: string[] | undefined;
10921
+ progress?: boolean | undefined;
10922
+ };
10923
+ actions: {
10924
+ key: string;
10925
+ label: string;
10926
+ mode: "REQUEST" | "INSTANT" | "VIEW";
10927
+ enabled: boolean;
10928
+ disabled?: {
10929
+ reason: string;
10930
+ message?: string | undefined;
10931
+ } | undefined;
10932
+ availableUntil?: string | undefined;
10933
+ subflow?: string | undefined;
10934
+ input?: {
10935
+ key: string;
10936
+ type: string;
10937
+ required: boolean;
10938
+ label: string;
10939
+ maxLength?: number | undefined;
10940
+ maxFiles?: number | undefined;
10941
+ options?: (string | number)[] | undefined;
10942
+ }[] | undefined;
10943
+ partialQuantity?: boolean | "UNIT" | undefined;
10944
+ }[];
10945
+ affectedOrderItemIds: string[];
10946
+ }>;
10947
+ };
10948
+ /**
10949
+ * 커머스 플로우 (이슈 #115) — 프리셋 설치·초안 저장·검사·게시와 상품 할당 규칙. 조회 `flow:r`, 쓰기 `flow:rw`.
10950
+ * 게시한 버전은 불변이고, 진행 중 주문은 결제 때 붙은 버전으로 끝까지 간다.
10951
+ */
10952
+ commerceFlows: {
10953
+ presets: () => Promise<{
10954
+ key: string;
10955
+ presetVersion: number;
10956
+ name: string;
10957
+ description: string;
10958
+ availability: "AVAILABLE" | "BLOCKED";
10959
+ dependsOn: string[];
10960
+ requires: Record<string, unknown>;
10961
+ variables: Record<string, unknown>[];
10962
+ }[]>;
10963
+ list: () => Promise<{
10964
+ flowId: string;
10965
+ key: string;
10966
+ name: string;
10967
+ progression: "ITEM" | "ORDER_GROUP";
10968
+ fulfillmentMethods: string[];
10969
+ presetKey: string | null;
10970
+ presetVersion: number | null;
10971
+ activeVersion: number | null;
10972
+ archivedAt: string | null;
10973
+ createdAt: string;
10974
+ updatedAt: string;
10975
+ }[]>;
10976
+ get: (flowId: string) => Promise<{
10977
+ flowId: string;
10978
+ key: string;
10979
+ name: string;
10980
+ progression: "ITEM" | "ORDER_GROUP";
10981
+ fulfillmentMethods: string[];
10982
+ presetKey: string | null;
10983
+ presetVersion: number | null;
10984
+ activeVersion: number | null;
10985
+ archivedAt: string | null;
10986
+ createdAt: string;
10987
+ updatedAt: string;
10988
+ draft: {
10989
+ version: number;
10990
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
10991
+ revision: number;
10992
+ graph: Record<string, unknown>;
10993
+ definition: Record<string, unknown>;
10994
+ variables: Record<string, unknown>;
10995
+ publishedAt: string | null;
10996
+ } | null;
10997
+ active: {
10998
+ version: number;
10999
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11000
+ revision: number;
11001
+ graph: Record<string, unknown>;
11002
+ definition: Record<string, unknown>;
11003
+ variables: Record<string, unknown>;
11004
+ publishedAt: string | null;
11005
+ } | null;
11006
+ versions: {
11007
+ version: number;
11008
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11009
+ publishedAt: string | null;
11010
+ }[];
11011
+ }>;
11012
+ /** 프리셋 설치 또는 빈 플로우. 에러: 409 `FLOW_KEY_TAKEN`·`FLOW_PRESET_UNAVAILABLE` */
11013
+ create: (body: CreateCommerceFlowRequest) => Promise<{
11014
+ flowId: string;
11015
+ key: string;
11016
+ name: string;
11017
+ progression: "ITEM" | "ORDER_GROUP";
11018
+ fulfillmentMethods: string[];
11019
+ presetKey: string | null;
11020
+ presetVersion: number | null;
11021
+ activeVersion: number | null;
11022
+ archivedAt: string | null;
11023
+ createdAt: string;
11024
+ updatedAt: string;
11025
+ draft: {
11026
+ version: number;
11027
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11028
+ revision: number;
11029
+ graph: Record<string, unknown>;
11030
+ definition: Record<string, unknown>;
11031
+ variables: Record<string, unknown>;
11032
+ publishedAt: string | null;
11033
+ } | null;
11034
+ active: {
11035
+ version: number;
11036
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11037
+ revision: number;
11038
+ graph: Record<string, unknown>;
11039
+ definition: Record<string, unknown>;
11040
+ variables: Record<string, unknown>;
11041
+ publishedAt: string | null;
11042
+ } | null;
11043
+ versions: {
11044
+ version: number;
11045
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11046
+ publishedAt: string | null;
11047
+ }[];
11048
+ }>;
11049
+ /** 초안 저장. `revision`을 주면 그 초안일 때만 저장한다(409 `FLOW_REVISION_CONFLICT`) */
11050
+ saveDraft: (flowId: string, body: SaveFlowDraftRequest, revision?: number) => Promise<{
11051
+ flowId: string;
11052
+ key: string;
11053
+ name: string;
11054
+ progression: "ITEM" | "ORDER_GROUP";
11055
+ fulfillmentMethods: string[];
11056
+ presetKey: string | null;
11057
+ presetVersion: number | null;
11058
+ activeVersion: number | null;
11059
+ archivedAt: string | null;
11060
+ createdAt: string;
11061
+ updatedAt: string;
11062
+ draft: {
11063
+ version: number;
11064
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11065
+ revision: number;
11066
+ graph: Record<string, unknown>;
11067
+ definition: Record<string, unknown>;
11068
+ variables: Record<string, unknown>;
11069
+ publishedAt: string | null;
11070
+ } | null;
11071
+ active: {
11072
+ version: number;
11073
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11074
+ revision: number;
11075
+ graph: Record<string, unknown>;
11076
+ definition: Record<string, unknown>;
11077
+ variables: Record<string, unknown>;
11078
+ publishedAt: string | null;
11079
+ } | null;
11080
+ versions: {
11081
+ version: number;
11082
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11083
+ publishedAt: string | null;
11084
+ }[];
11085
+ }>;
11086
+ check: (flowId: string) => Promise<{
11087
+ publishable: boolean;
11088
+ blocking: {
11089
+ code: string;
11090
+ message: string;
11091
+ nodeId?: string | undefined;
11092
+ edgeId?: string | undefined;
11093
+ }[];
11094
+ warnings: {
11095
+ code: string;
11096
+ message: string;
11097
+ nodeId?: string | undefined;
11098
+ edgeId?: string | undefined;
11099
+ }[];
11100
+ }>;
11101
+ /** 게시. 차단 오류가 있으면 409 `PUBLISH_BLOCKED`(`details.blocking`) */
11102
+ publish: (flowId: string) => Promise<{
11103
+ flowId: string;
11104
+ key: string;
11105
+ name: string;
11106
+ progression: "ITEM" | "ORDER_GROUP";
11107
+ fulfillmentMethods: string[];
11108
+ presetKey: string | null;
11109
+ presetVersion: number | null;
11110
+ activeVersion: number | null;
11111
+ archivedAt: string | null;
11112
+ createdAt: string;
11113
+ updatedAt: string;
11114
+ draft: {
11115
+ version: number;
11116
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11117
+ revision: number;
11118
+ graph: Record<string, unknown>;
11119
+ definition: Record<string, unknown>;
11120
+ variables: Record<string, unknown>;
11121
+ publishedAt: string | null;
11122
+ } | null;
11123
+ active: {
11124
+ version: number;
11125
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11126
+ revision: number;
11127
+ graph: Record<string, unknown>;
11128
+ definition: Record<string, unknown>;
11129
+ variables: Record<string, unknown>;
11130
+ publishedAt: string | null;
11131
+ } | null;
11132
+ versions: {
11133
+ version: number;
11134
+ status: "ACTIVE" | "DRAFT" | "LEGACY";
11135
+ publishedAt: string | null;
11136
+ }[];
11137
+ }>;
11138
+ rules: () => Promise<{
11139
+ ruleId: string;
11140
+ priority: number;
11141
+ condition: string;
11142
+ flowId: string;
11143
+ }[]>;
11144
+ /** 할당 규칙 전체 교체(우선순위는 배열 순서). 에러: 400 `FLOW_ASSIGNMENT_CONDITION_INVALID`, 409 `FLOW_NOT_PUBLISHED` */
11145
+ saveRules: (body: SaveFlowAssignmentRulesRequest) => Promise<{
11146
+ ruleId: string;
11147
+ priority: number;
11148
+ condition: string;
11149
+ flowId: string;
11150
+ }[]>;
11151
+ testRules: (body: TestFlowAssignmentRequest) => Promise<{
11152
+ flowId: string;
11153
+ version: number;
11154
+ source: "RULE" | "PLATFORM";
11155
+ ruleId?: string | undefined;
11156
+ }>;
11157
+ /** 이 상품에 지금 붙을 플로우 */
11158
+ forProduct: (productId: string) => Promise<{
11159
+ flowId: string;
11160
+ version: number;
11161
+ source: "RULE" | "PLATFORM";
11162
+ ruleId?: string | undefined;
11163
+ }>;
11164
+ /** HTTP 노드 시크릿 목록(헤더 값 제외) */
11165
+ secrets: () => Promise<{
11166
+ name: string;
11167
+ url: string;
11168
+ headerNames: string[];
11169
+ updatedAt: string;
11170
+ }[]>;
11171
+ /** 시크릿 저장(같은 이름이면 덮어쓴다). 상점 플랫폼 OWNER·ADMIN만. 에러: 400 `FLOW_SECRET_URL_INVALID` */
11172
+ saveSecret: (name: string, body: SaveFlowSecretRequest) => Promise<{
11173
+ name: string;
11174
+ url: string;
11175
+ headerNames: string[];
11176
+ updatedAt: string;
11177
+ }>;
11178
+ removeSecret: (name: string) => Promise<void>;
9843
11179
  };
9844
11180
  carriers: {
9845
11181
  list: () => Promise<{
@@ -11923,7 +13259,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11923
13259
  list: () => Promise<{
11924
13260
  webhookId: string;
11925
13261
  url: string;
11926
- eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK")[];
13262
+ eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION")[];
11927
13263
  status: "SUSPENDED" | "ACTIVE";
11928
13264
  secretPrefix: string;
11929
13265
  suspendedAt: string | null;
@@ -11933,7 +13269,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11933
13269
  create: (body: WebhookRequest) => Promise<{
11934
13270
  webhookId: string;
11935
13271
  url: string;
11936
- eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK")[];
13272
+ eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION")[];
11937
13273
  status: "SUSPENDED" | "ACTIVE";
11938
13274
  secretPrefix: string;
11939
13275
  suspendedAt: string | null;
@@ -11943,7 +13279,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11943
13279
  get: (webhookId: string) => Promise<{
11944
13280
  webhookId: string;
11945
13281
  url: string;
11946
- eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK")[];
13282
+ eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION")[];
11947
13283
  status: "SUSPENDED" | "ACTIVE";
11948
13284
  secretPrefix: string;
11949
13285
  suspendedAt: string | null;
@@ -11953,7 +13289,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11953
13289
  update: (webhookId: string, body: WebhookRequest) => Promise<{
11954
13290
  webhookId: string;
11955
13291
  url: string;
11956
- eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK")[];
13292
+ eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION")[];
11957
13293
  status: "SUSPENDED" | "ACTIVE";
11958
13294
  secretPrefix: string;
11959
13295
  suspendedAt: string | null;
@@ -11968,7 +13304,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11968
13304
  resume: (webhookId: string) => Promise<{
11969
13305
  webhookId: string;
11970
13306
  url: string;
11971
- eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK")[];
13307
+ eventTypes: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION")[];
11972
13308
  status: "SUSPENDED" | "ACTIVE";
11973
13309
  secretPrefix: string;
11974
13310
  suspendedAt: string | null;
@@ -11978,7 +13314,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11978
13314
  listDeliveries: (webhookId: string, params?: WebhookDeliveryListParams) => Promise<{
11979
13315
  deliveryId: string;
11980
13316
  eventId: string;
11981
- eventType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK";
13317
+ eventType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION";
11982
13318
  url: string;
11983
13319
  status: "PENDING" | "PENDING_RETRY" | "SUCCESS" | "FAILED";
11984
13320
  responseStatusCode: number | null;
@@ -12005,7 +13341,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
12005
13341
  getDelivery: (webhookId: string, deliveryId: string) => Promise<{
12006
13342
  deliveryId: string;
12007
13343
  eventId: string;
12008
- eventType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK";
13344
+ eventType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION";
12009
13345
  url: string;
12010
13346
  status: "PENDING" | "PENDING_RETRY" | "SUCCESS" | "FAILED";
12011
13347
  responseStatusCode: number | null;
@@ -12040,7 +13376,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
12040
13376
  redeliver: (webhookId: string, deliveryId: string) => Promise<{
12041
13377
  deliveryId: string;
12042
13378
  eventId: string;
12043
- eventType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK";
13379
+ eventType: "ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION";
12044
13380
  url: string;
12045
13381
  status: "PENDING" | "PENDING_RETRY" | "SUCCESS" | "FAILED";
12046
13382
  responseStatusCode: number | null;
@@ -12418,6 +13754,40 @@ export declare function createStoreClient(options: StoreClientOptions): {
12418
13754
  remove: (addressId: string) => Promise<void>;
12419
13755
  setDefault: (addressId: string) => Promise<void>;
12420
13756
  };
13757
+ /** 픽업 장소 (이슈 #115) — 방문 수령 주문의 수령 장소. 조회 `store:r`, 쓰기 `store:rw`(상점 플랫폼 OWNER·ADMIN) */
13758
+ pickupLocations: {
13759
+ list: () => Promise<{
13760
+ locationId: string;
13761
+ name: string;
13762
+ address: string;
13763
+ phone: string | null;
13764
+ hours: string | null;
13765
+ usable: boolean;
13766
+ sortOrder: number;
13767
+ createdAt: string;
13768
+ }[]>;
13769
+ create: (body: PickupLocationRequestInput) => Promise<{
13770
+ locationId: string;
13771
+ name: string;
13772
+ address: string;
13773
+ phone: string | null;
13774
+ hours: string | null;
13775
+ usable: boolean;
13776
+ sortOrder: number;
13777
+ createdAt: string;
13778
+ }>;
13779
+ update: (locationId: string, body: PickupLocationRequestInput) => Promise<{
13780
+ locationId: string;
13781
+ name: string;
13782
+ address: string;
13783
+ phone: string | null;
13784
+ hours: string | null;
13785
+ usable: boolean;
13786
+ sortOrder: number;
13787
+ createdAt: string;
13788
+ }>;
13789
+ remove: (locationId: string) => Promise<void>;
13790
+ };
12421
13791
  /**
12422
13792
  * 스토어프론트 호스팅 (이슈 #53) — 조회 `storefront:r`, 쓰기 `storefront:rw`(OWNER·ADMIN).
12423
13793
  * 쓰기 응답은 바뀐 사이트다. Cloudflare 반영은 커밋 뒤라 `provisioning.status`가 잠시 `PENDING`일 수 있다.
@@ -14440,10 +15810,13 @@ export declare const STORE_SCOPE_RESOURCES: {
14440
15810
  readonly audit: readonly ["r"];
14441
15811
  readonly promotion: readonly ["r", "rw"];
14442
15812
  readonly storefront: readonly ["r", "rw"];
15813
+ readonly flow: readonly ["r", "rw"];
14443
15814
  };
14444
15815
  export type StoreScopeResource = keyof typeof STORE_SCOPE_RESOURCES;
14445
15816
  export declare const storeScopeResourceSchema: z.ZodEnum<{
14446
15817
  category: "category";
15818
+ member: "member";
15819
+ flow: "flow";
14447
15820
  analytics: "analytics";
14448
15821
  product: "product";
14449
15822
  order: "order";
@@ -14453,7 +15826,6 @@ export declare const storeScopeResourceSchema: z.ZodEnum<{
14453
15826
  settlement: "settlement";
14454
15827
  webhook: "webhook";
14455
15828
  store: "store";
14456
- member: "member";
14457
15829
  customer: "customer";
14458
15830
  audit: "audit";
14459
15831
  promotion: "promotion";
@@ -14466,9 +15838,9 @@ export declare function isStoreScope(scope: string): boolean;
14466
15838
  * 계정 토큰으로 상점을 호출할 때의 스코프는 그 상점에서의 역할로 이 표에서 결정된다.
14467
15839
  */
14468
15840
  export declare const STORE_ROLE_SCOPES: {
14469
- readonly OWNER: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "settlement:r", "analytics:r", "webhook:rw", "store:rw", "member:rw", "customer:rw", "audit:r", "promotion:rw", "storefront:rw"];
14470
- readonly ADMIN: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "analytics:r", "webhook:rw", "store:rw", "member:rw", "customer:rw", "audit:r", "promotion:rw", "storefront:rw"];
14471
- readonly STAFF: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "customer:r", "promotion:r"];
15841
+ readonly OWNER: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "settlement:r", "analytics:r", "webhook:rw", "store:rw", "member:rw", "customer:rw", "audit:r", "promotion:rw", "storefront:rw", "flow:rw"];
15842
+ readonly ADMIN: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "analytics:r", "webhook:rw", "store:rw", "member:rw", "customer:rw", "audit:r", "promotion:rw", "storefront:rw", "flow:rw"];
15843
+ readonly STAFF: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "customer:r", "promotion:r", "flow:r"];
14472
15844
  };
14473
15845
  //#endregion
14474
15846
  //#region src/schemas/shipping-policy.d.ts
@@ -14606,6 +15978,8 @@ export interface DeliveryFeeLine {
14606
15978
  * 유형을 바꿔도 결제 시작의 견적과 주문상품 스냅샷이 같은 유형을 보게 한다. 생략하면 상품 값을 쓴다.
14607
15979
  */
14608
15980
  fulfillmentType?: FulfillmentType | null;
15981
+ /** 이 줄의 이행 방식(이슈 #115) — 배송지가 없는 방식(방문 수령)은 묶음을 만들지 않는다. 생략하면 유형 규칙만 본다 */
15982
+ fulfillmentMethod?: string | null;
14609
15983
  }
14610
15984
  /**
14611
15985
  * 기본 배송비를 면제한 근거 — 면제하지 않았으면 null이다.
@@ -15056,8 +16430,24 @@ export declare const orderWebhookEventDataSchema: z.ZodObject<{
15056
16430
  bundleKey: z.ZodNullable<z.ZodString>;
15057
16431
  returnAddressId: z.ZodNullable<z.ZodString>;
15058
16432
  }, z.core.$strip>;
16433
+ method: z.ZodOptional<z.ZodString>;
16434
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16435
+ locationId: z.ZodString;
16436
+ name: z.ZodString;
16437
+ address: z.ZodString;
16438
+ phone: z.ZodNullable<z.ZodString>;
16439
+ hours: z.ZodNullable<z.ZodString>;
16440
+ }, z.core.$strip>>;
15059
16441
  }, z.core.$strip>, z.ZodObject<{
15060
16442
  type: z.ZodLiteral<"MANUAL">;
16443
+ method: z.ZodOptional<z.ZodString>;
16444
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16445
+ locationId: z.ZodString;
16446
+ name: z.ZodString;
16447
+ address: z.ZodString;
16448
+ phone: z.ZodNullable<z.ZodString>;
16449
+ hours: z.ZodNullable<z.ZodString>;
16450
+ }, z.core.$strip>>;
15061
16451
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15062
16452
  type: z.ZodString;
15063
16453
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15075,6 +16465,8 @@ export declare const orderWebhookEventDataSchema: z.ZodObject<{
15075
16465
  customInputs: z.ZodArray<z.ZodObject<{
15076
16466
  label: z.ZodString;
15077
16467
  value: z.ZodString;
16468
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16469
+ type: z.ZodOptional<z.ZodString>;
15078
16470
  }, z.core.$strip>>;
15079
16471
  }, z.core.$strip>>>;
15080
16472
  }, z.core.$strip>;
@@ -15103,8 +16495,24 @@ export declare const orderFulfilledWebhookEventDataSchema: z.ZodObject<{
15103
16495
  bundleKey: z.ZodNullable<z.ZodString>;
15104
16496
  returnAddressId: z.ZodNullable<z.ZodString>;
15105
16497
  }, z.core.$strip>;
16498
+ method: z.ZodOptional<z.ZodString>;
16499
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16500
+ locationId: z.ZodString;
16501
+ name: z.ZodString;
16502
+ address: z.ZodString;
16503
+ phone: z.ZodNullable<z.ZodString>;
16504
+ hours: z.ZodNullable<z.ZodString>;
16505
+ }, z.core.$strip>>;
15106
16506
  }, z.core.$strip>, z.ZodObject<{
15107
16507
  type: z.ZodLiteral<"MANUAL">;
16508
+ method: z.ZodOptional<z.ZodString>;
16509
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16510
+ locationId: z.ZodString;
16511
+ name: z.ZodString;
16512
+ address: z.ZodString;
16513
+ phone: z.ZodNullable<z.ZodString>;
16514
+ hours: z.ZodNullable<z.ZodString>;
16515
+ }, z.core.$strip>>;
15108
16516
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15109
16517
  type: z.ZodString;
15110
16518
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15239,8 +16647,24 @@ export declare const orderWebhookEventSchema: z.ZodObject<{
15239
16647
  bundleKey: z.ZodNullable<z.ZodString>;
15240
16648
  returnAddressId: z.ZodNullable<z.ZodString>;
15241
16649
  }, z.core.$strip>;
16650
+ method: z.ZodOptional<z.ZodString>;
16651
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16652
+ locationId: z.ZodString;
16653
+ name: z.ZodString;
16654
+ address: z.ZodString;
16655
+ phone: z.ZodNullable<z.ZodString>;
16656
+ hours: z.ZodNullable<z.ZodString>;
16657
+ }, z.core.$strip>>;
15242
16658
  }, z.core.$strip>, z.ZodObject<{
15243
16659
  type: z.ZodLiteral<"MANUAL">;
16660
+ method: z.ZodOptional<z.ZodString>;
16661
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16662
+ locationId: z.ZodString;
16663
+ name: z.ZodString;
16664
+ address: z.ZodString;
16665
+ phone: z.ZodNullable<z.ZodString>;
16666
+ hours: z.ZodNullable<z.ZodString>;
16667
+ }, z.core.$strip>>;
15244
16668
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15245
16669
  type: z.ZodString;
15246
16670
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15258,6 +16682,8 @@ export declare const orderWebhookEventSchema: z.ZodObject<{
15258
16682
  customInputs: z.ZodArray<z.ZodObject<{
15259
16683
  label: z.ZodString;
15260
16684
  value: z.ZodString;
16685
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16686
+ type: z.ZodOptional<z.ZodString>;
15261
16687
  }, z.core.$strip>>;
15262
16688
  }, z.core.$strip>>>;
15263
16689
  }, z.core.$strip>;
@@ -15288,8 +16714,24 @@ export declare const orderFulfilledWebhookEventSchema: z.ZodObject<{
15288
16714
  bundleKey: z.ZodNullable<z.ZodString>;
15289
16715
  returnAddressId: z.ZodNullable<z.ZodString>;
15290
16716
  }, z.core.$strip>;
16717
+ method: z.ZodOptional<z.ZodString>;
16718
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16719
+ locationId: z.ZodString;
16720
+ name: z.ZodString;
16721
+ address: z.ZodString;
16722
+ phone: z.ZodNullable<z.ZodString>;
16723
+ hours: z.ZodNullable<z.ZodString>;
16724
+ }, z.core.$strip>>;
15291
16725
  }, z.core.$strip>, z.ZodObject<{
15292
16726
  type: z.ZodLiteral<"MANUAL">;
16727
+ method: z.ZodOptional<z.ZodString>;
16728
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16729
+ locationId: z.ZodString;
16730
+ name: z.ZodString;
16731
+ address: z.ZodString;
16732
+ phone: z.ZodNullable<z.ZodString>;
16733
+ hours: z.ZodNullable<z.ZodString>;
16734
+ }, z.core.$strip>>;
15293
16735
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15294
16736
  type: z.ZodString;
15295
16737
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15426,6 +16868,33 @@ export declare const productOutOfStockWebhookEventSchema: z.ZodObject<{
15426
16868
  storeId: z.ZodString;
15427
16869
  sequence: z.ZodOptional<z.ZodNumber>;
15428
16870
  }, z.core.$strip>;
16871
+ /**
16872
+ * 플로우 알림(이슈 #115) — 상점이 플로우에 둔 알림 블록(`core.notify`, 채널 `webhook`)이 보낸다. 구매자 알림(알림톡·메일)은 이 이벤트를 받아
16873
+ * 상점이 보낸다(플랫폼은 구매자에게 직접 보내지 않는다). 개인정보는 싣지 않는다
16874
+ */
16875
+ export declare const flowNotificationWebhookEventDataSchema: z.ZodObject<{
16876
+ orderId: z.ZodString;
16877
+ orderItemIds: z.ZodArray<z.ZodString>;
16878
+ event: z.ZodString;
16879
+ flowId: z.ZodString;
16880
+ flowVersion: z.ZodNumber;
16881
+ state: z.ZodString;
16882
+ }, z.core.$strip>;
16883
+ export declare const flowNotificationWebhookEventSchema: z.ZodObject<{
16884
+ type: z.ZodLiteral<"ORDER.FLOW_NOTIFICATION">;
16885
+ data: z.ZodObject<{
16886
+ orderId: z.ZodString;
16887
+ orderItemIds: z.ZodArray<z.ZodString>;
16888
+ event: z.ZodString;
16889
+ flowId: z.ZodString;
16890
+ flowVersion: z.ZodNumber;
16891
+ state: z.ZodString;
16892
+ }, z.core.$strip>;
16893
+ id: z.ZodString;
16894
+ createdAt: z.ZodString;
16895
+ storeId: z.ZodString;
16896
+ sequence: z.ZodOptional<z.ZodNumber>;
16897
+ }, z.core.$strip>;
15429
16898
  /** 웹훅 요청 본문. `type`으로 판별하며 `data` 형태가 타입별로 다르다 */
15430
16899
  export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15431
16900
  type: z.ZodEnum<{
@@ -15459,8 +16928,24 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15459
16928
  bundleKey: z.ZodNullable<z.ZodString>;
15460
16929
  returnAddressId: z.ZodNullable<z.ZodString>;
15461
16930
  }, z.core.$strip>;
16931
+ method: z.ZodOptional<z.ZodString>;
16932
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16933
+ locationId: z.ZodString;
16934
+ name: z.ZodString;
16935
+ address: z.ZodString;
16936
+ phone: z.ZodNullable<z.ZodString>;
16937
+ hours: z.ZodNullable<z.ZodString>;
16938
+ }, z.core.$strip>>;
15462
16939
  }, z.core.$strip>, z.ZodObject<{
15463
16940
  type: z.ZodLiteral<"MANUAL">;
16941
+ method: z.ZodOptional<z.ZodString>;
16942
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16943
+ locationId: z.ZodString;
16944
+ name: z.ZodString;
16945
+ address: z.ZodString;
16946
+ phone: z.ZodNullable<z.ZodString>;
16947
+ hours: z.ZodNullable<z.ZodString>;
16948
+ }, z.core.$strip>>;
15464
16949
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15465
16950
  type: z.ZodString;
15466
16951
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15478,6 +16963,8 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15478
16963
  customInputs: z.ZodArray<z.ZodObject<{
15479
16964
  label: z.ZodString;
15480
16965
  value: z.ZodString;
16966
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16967
+ type: z.ZodOptional<z.ZodString>;
15481
16968
  }, z.core.$strip>>;
15482
16969
  }, z.core.$strip>>>;
15483
16970
  }, z.core.$strip>;
@@ -15507,8 +16994,24 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15507
16994
  bundleKey: z.ZodNullable<z.ZodString>;
15508
16995
  returnAddressId: z.ZodNullable<z.ZodString>;
15509
16996
  }, z.core.$strip>;
16997
+ method: z.ZodOptional<z.ZodString>;
16998
+ pickupLocation: z.ZodOptional<z.ZodObject<{
16999
+ locationId: z.ZodString;
17000
+ name: z.ZodString;
17001
+ address: z.ZodString;
17002
+ phone: z.ZodNullable<z.ZodString>;
17003
+ hours: z.ZodNullable<z.ZodString>;
17004
+ }, z.core.$strip>>;
15510
17005
  }, z.core.$strip>, z.ZodObject<{
15511
17006
  type: z.ZodLiteral<"MANUAL">;
17007
+ method: z.ZodOptional<z.ZodString>;
17008
+ pickupLocation: z.ZodOptional<z.ZodObject<{
17009
+ locationId: z.ZodString;
17010
+ name: z.ZodString;
17011
+ address: z.ZodString;
17012
+ phone: z.ZodNullable<z.ZodString>;
17013
+ hours: z.ZodNullable<z.ZodString>;
17014
+ }, z.core.$strip>>;
15512
17015
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15513
17016
  type: z.ZodString;
15514
17017
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15639,6 +17142,20 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15639
17142
  createdAt: z.ZodString;
15640
17143
  storeId: z.ZodString;
15641
17144
  sequence: z.ZodOptional<z.ZodNumber>;
17145
+ }, z.core.$strip>, z.ZodObject<{
17146
+ type: z.ZodLiteral<"ORDER.FLOW_NOTIFICATION">;
17147
+ data: z.ZodObject<{
17148
+ orderId: z.ZodString;
17149
+ orderItemIds: z.ZodArray<z.ZodString>;
17150
+ event: z.ZodString;
17151
+ flowId: z.ZodString;
17152
+ flowVersion: z.ZodNumber;
17153
+ state: z.ZodString;
17154
+ }, z.core.$strip>;
17155
+ id: z.ZodString;
17156
+ createdAt: z.ZodString;
17157
+ storeId: z.ZodString;
17158
+ sequence: z.ZodOptional<z.ZodNumber>;
15642
17159
  }, z.core.$strip>], "type">;
15643
17160
  export type WebhookEvent = z.infer<typeof webhookEventSchema>;
15644
17161
  export type WebhookEventType = WebhookEvent["type"];
@@ -15648,5 +17165,33 @@ export type WebhookEventOf<T extends WebhookEventType> = WebhookEvent extends (i
15648
17165
  } ? T extends U ? Omit<E, "type"> & {
15649
17166
  type: T;
15650
17167
  } : never : never : never;
17168
+ /**
17169
+ * 알려진 웹훅 이벤트 타입 — `webhookEventSchema`의 판별 값 목록(이 SDK 버전이 아는 것).
17170
+ * 서버는 새 타입을 구독한 엔드포인트에만 보내지만, 구독을 더 넓힌 수신자를 위해 `parseWebhookEvent`가 모르는 타입을 따로 받는다.
17171
+ */
17172
+ export declare const KNOWN_WEBHOOK_EVENT_TYPES: readonly WebhookEventType[];
17173
+ /** 이 SDK 버전이 모르는 이벤트 — 봉투만 검증하고 `data`는 그대로 둔다 */
17174
+ export declare const unknownWebhookEventSchema: z.ZodObject<{
17175
+ type: z.ZodString;
17176
+ data: z.ZodUnknown;
17177
+ id: z.ZodString;
17178
+ createdAt: z.ZodString;
17179
+ storeId: z.ZodString;
17180
+ sequence: z.ZodOptional<z.ZodNumber>;
17181
+ }, z.core.$strip>;
17182
+ export type UnknownWebhookEvent = z.infer<typeof unknownWebhookEventSchema>;
17183
+ export type ParsedWebhookEvent = {
17184
+ known: true;
17185
+ event: WebhookEvent;
17186
+ } | {
17187
+ known: false;
17188
+ event: UnknownWebhookEvent;
17189
+ };
17190
+ /**
17191
+ * 웹훅 본문을 `type`으로 먼저 판별해 읽는다(이슈 #115 결정 25). 알려진 타입은 그 타입의 스키마로 엄격하게 읽고 틀리면 던진다 —
17192
+ * `z.union([known, unknown])`처럼 읽으면 알려진 타입의 파싱 실패가 `known: false`로 조용히 새어 수신자가 처리할 이벤트를 버린다.
17193
+ * 모르는 타입은 봉투만 검증해 `known: false`로 돌려준다(새 이벤트에 옛 SDK가 깨지지 않는다).
17194
+ */
17195
+ export declare function parseWebhookEvent(body: unknown): ParsedWebhookEvent;
15651
17196
  //#endregion
15652
17197
  export { type AuthorizeOptions, type OAuthTokenResponse, type Query, type SessionStorage, type StoreAuthServer, type StoreClient, type StoreClientOptions, type StoreSession, type StoreSessionOptions, type TokenSource, WEBHOOK_DEFAULT_TOLERANCE_SEC, WEBHOOK_DELIVERY_ID_HEADER, WEBHOOK_EVENT_ID_HEADER, WEBHOOK_EVENT_TYPE_HEADER, WEBHOOK_HEADERS, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_USER_AGENT };