@sayren/store-sdk 0.29.6 → 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
@@ -165,8 +165,8 @@ export declare const auditLogPageSchema: z.ZodObject<{
165
165
  }, z.core.$strip>;
166
166
  export type AuditLogPage = z.infer<typeof auditLogPageSchema>;
167
167
  export declare const agentPolicyDecisionSchema: z.ZodEnum<{
168
- APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
169
168
  DENIED: "DENIED";
169
+ APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
170
170
  ALLOW: "ALLOW";
171
171
  }>;
172
172
  export type AgentPolicyDecision = z.infer<typeof agentPolicyDecisionSchema>;
@@ -190,8 +190,8 @@ export type WritePreview = z.infer<typeof writePreviewSchema>;
190
190
  export declare const writeDryRunResultSchema: z.ZodObject<{
191
191
  dryRun: z.ZodLiteral<true>;
192
192
  decision: z.ZodEnum<{
193
- APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
194
193
  DENIED: "DENIED";
194
+ APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
195
195
  ALLOW: "ALLOW";
196
196
  }>;
197
197
  reason: z.ZodNullable<z.ZodString>;
@@ -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`.
@@ -2022,10 +2413,15 @@ export declare const couponStatusSchema: z.ZodEnum<{
2022
2413
  ENDED: "ENDED";
2023
2414
  }>;
2024
2415
  export type CouponStatus = z.infer<typeof couponStatusSchema>;
2025
- /** 지금 만들 수 있는 발급 방식 — 다운로드·가입 자동 지급은 뒤 단계다 */
2416
+ /**
2417
+ * 발급 방식 — 코드 입력·셀러 지급·다운로드(구매자가 받기)·회원가입 자동 지급(이슈 #110).
2418
+ * 응답(`couponSchema.issueMethod`)은 값이 늘 수 있어 문자열로 받는다. 이 enum은 요청 검증용이다.
2419
+ */
2026
2420
  export declare const couponIssueMethodSchema: z.ZodEnum<{
2027
2421
  MANUAL: "MANUAL";
2028
2422
  CODE: "CODE";
2423
+ DOWNLOAD: "DOWNLOAD";
2424
+ SIGNUP: "SIGNUP";
2029
2425
  }>;
2030
2426
  export type CouponIssueMethod = z.infer<typeof couponIssueMethodSchema>;
2031
2427
  /** 코드 형식 — 영문·숫자·`-`·`_` 6~30자. 대소문자를 구분하지 않고 서버가 대문자로 저장한다 */
@@ -2078,6 +2474,8 @@ export declare const createCouponRequestSchema: z.ZodObject<{
2078
2474
  issueMethod: z.ZodEnum<{
2079
2475
  MANUAL: "MANUAL";
2080
2476
  CODE: "CODE";
2477
+ DOWNLOAD: "DOWNLOAD";
2478
+ SIGNUP: "SIGNUP";
2081
2479
  }>;
2082
2480
  code: z.ZodOptional<z.ZodString>;
2083
2481
  startsAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
@@ -2196,6 +2594,8 @@ export declare const couponListQuerySchema: z.ZodObject<{
2196
2594
  issueMethod: z.ZodOptional<z.ZodEnum<{
2197
2595
  MANUAL: "MANUAL";
2198
2596
  CODE: "CODE";
2597
+ DOWNLOAD: "DOWNLOAD";
2598
+ SIGNUP: "SIGNUP";
2199
2599
  }>>;
2200
2600
  q: z.ZodOptional<z.ZodString>;
2201
2601
  }, z.core.$strip>;
@@ -2206,6 +2606,7 @@ export declare const couponIssueSchema: z.ZodObject<{
2206
2606
  couponId: z.ZodString;
2207
2607
  customerId: z.ZodString;
2208
2608
  customerName: z.ZodNullable<z.ZodString>;
2609
+ source: z.ZodOptional<z.ZodString>;
2209
2610
  status: z.ZodString;
2210
2611
  validFrom: z.ZodString;
2211
2612
  validUntil: z.ZodNullable<z.ZodString>;
@@ -2284,6 +2685,7 @@ export declare const customerCouponSchema: z.ZodObject<{
2284
2685
  couponId: z.ZodString;
2285
2686
  customerId: z.ZodString;
2286
2687
  customerName: z.ZodNullable<z.ZodString>;
2688
+ source: z.ZodOptional<z.ZodString>;
2287
2689
  status: z.ZodString;
2288
2690
  validFrom: z.ZodString;
2289
2691
  validUntil: z.ZodNullable<z.ZodString>;
@@ -2384,8 +2786,8 @@ export type ConsentAction = z.infer<typeof consentActionSchema>;
2384
2786
  * `RECONSENT` 약관 개정 재동의 · `MEMBER_UPDATE` 구매자가 직접 변경 · `SELLER` 셀러가 처리
2385
2787
  */
2386
2788
  export declare const consentSourceSchema: z.ZodEnum<{
2387
- SELLER: "SELLER";
2388
2789
  SIGNUP: "SIGNUP";
2790
+ SELLER: "SELLER";
2389
2791
  SOCIAL_SIGNUP: "SOCIAL_SIGNUP";
2390
2792
  DELEGATED: "DELEGATED";
2391
2793
  RECONSENT: "RECONSENT";
@@ -2407,8 +2809,8 @@ export declare const customerConsentSchema: z.ZodObject<{
2407
2809
  AGREED: "AGREED";
2408
2810
  }>;
2409
2811
  source: z.ZodEnum<{
2410
- SELLER: "SELLER";
2411
2812
  SIGNUP: "SIGNUP";
2813
+ SELLER: "SELLER";
2412
2814
  SOCIAL_SIGNUP: "SOCIAL_SIGNUP";
2413
2815
  DELEGATED: "DELEGATED";
2414
2816
  RECONSENT: "RECONSENT";
@@ -2611,7 +3013,341 @@ export declare const customerWithdrawalBlockedDetailsSchema: z.ZodObject<{
2611
3013
  openClaims: z.ZodNumber;
2612
3014
  pendingPayments: z.ZodNumber;
2613
3015
  }, z.core.$strip>;
2614
- 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>;
2615
3351
  //#endregion
2616
3352
  //#region src/schemas/login.d.ts
2617
3353
  /** 소셜 로그인 공급자 */
@@ -2884,6 +3620,7 @@ export declare const eventTypeSchema: z.ZodEnum<{
2884
3620
  "INQUIRY.CREATED": "INQUIRY.CREATED";
2885
3621
  "REVIEW.CREATED": "REVIEW.CREATED";
2886
3622
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3623
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
2887
3624
  }>;
2888
3625
  export type EventType = z.infer<typeof eventTypeSchema>;
2889
3626
  export declare const webhookStatusSchema: z.ZodEnum<{
@@ -2910,6 +3647,7 @@ export declare const webhookSchema: z.ZodObject<{
2910
3647
  "INQUIRY.CREATED": "INQUIRY.CREATED";
2911
3648
  "REVIEW.CREATED": "REVIEW.CREATED";
2912
3649
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3650
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
2913
3651
  }>>;
2914
3652
  status: z.ZodEnum<{
2915
3653
  SUSPENDED: "SUSPENDED";
@@ -2940,6 +3678,7 @@ export declare const webhookCreatedSchema: z.ZodObject<{
2940
3678
  "INQUIRY.CREATED": "INQUIRY.CREATED";
2941
3679
  "REVIEW.CREATED": "REVIEW.CREATED";
2942
3680
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3681
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
2943
3682
  }>>;
2944
3683
  status: z.ZodEnum<{
2945
3684
  SUSPENDED: "SUSPENDED";
@@ -3020,6 +3759,7 @@ export declare const webhookDeliverySchema: z.ZodObject<{
3020
3759
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3021
3760
  "REVIEW.CREATED": "REVIEW.CREATED";
3022
3761
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3762
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3023
3763
  }>;
3024
3764
  url: z.ZodString;
3025
3765
  status: z.ZodEnum<{
@@ -3073,6 +3813,7 @@ export declare const webhookDeliveryDetailSchema: z.ZodObject<{
3073
3813
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3074
3814
  "REVIEW.CREATED": "REVIEW.CREATED";
3075
3815
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3816
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3076
3817
  }>;
3077
3818
  url: z.ZodString;
3078
3819
  status: z.ZodEnum<{
@@ -3135,6 +3876,7 @@ export declare const webhookDeliveryListQuerySchema: z.ZodObject<{
3135
3876
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3136
3877
  "REVIEW.CREATED": "REVIEW.CREATED";
3137
3878
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3879
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3138
3880
  }>>;
3139
3881
  resourceId: z.ZodOptional<z.ZodString>;
3140
3882
  limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
@@ -3162,6 +3904,7 @@ export declare const webhookTestRequestSchema: z.ZodObject<{
3162
3904
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3163
3905
  "REVIEW.CREATED": "REVIEW.CREATED";
3164
3906
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3907
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3165
3908
  }>;
3166
3909
  }, z.core.$strip>;
3167
3910
  export type WebhookTestRequest = z.infer<typeof webhookTestRequestSchema>;
@@ -3203,6 +3946,7 @@ export declare const webhookRequestSchema: z.ZodObject<{
3203
3946
  "INQUIRY.CREATED": "INQUIRY.CREATED";
3204
3947
  "REVIEW.CREATED": "REVIEW.CREATED";
3205
3948
  "PRODUCT.OUT_OF_STOCK": "PRODUCT.OUT_OF_STOCK";
3949
+ "ORDER.FLOW_NOTIFICATION": "ORDER.FLOW_NOTIFICATION";
3206
3950
  }>>;
3207
3951
  }, z.core.$strip>;
3208
3952
  export type WebhookRequest = z.infer<typeof webhookRequestSchema>;
@@ -3275,208 +4019,6 @@ export declare const reviewReportResultSchema: z.ZodObject<{
3275
4019
  }, z.core.$strip>;
3276
4020
  export type ReviewReportResult = z.infer<typeof reviewReportResultSchema>;
3277
4021
  //#endregion
3278
- //#region src/schemas/fulfillment.d.ts
3279
- /**
3280
- * 상품 유형 (이슈 #48·#57) — 배송이 필요한 상품과 필요 없는 상품을 가르는 축이다.
3281
- *
3282
- * **상품 유형은 이행 방식 하나로 표현한다.** `fulfillment.type`이 배송 필요 여부, 이행 흐름, 클레임 규칙을 정한다.
3283
- * 코드 곳곳에서 유형 이름으로 분기하지 않고 이 파일의 판정 함수(`requiresShipping`·`fulfillmentRuleOf`)를 지난다.
3284
- *
3285
- * 주문상품 상태 enum은 바꾸지 않는다. 비실물의 **제공 완료는 `DELIVERED`를 재사용한다** — 새 상태를 더하면 기존 소비자의
3286
- * 상태 분기(배송완료 뒤 구매확정 대기, 반품 가능 판정)가 새 값을 모른다. 표시는 유형으로 가른다.
3287
- */
3288
- /**
3289
- * 상품 유형.
3290
- * - `SHIPPING` 배송 상품. 택배로 발송하고 송장·배송 추적으로 배송완료가 된다
3291
- * - `MANUAL` 배송 없는 상품(비실물). 셀러가 제공 처리(`POST /v1/order-items/{orderItemId}/fulfill`)로 제공 완료를 기록한다
3292
- *
3293
- * 비실물의 세부 구분(파일 다운로드·코드 발급·이용권·방문 수령)은 2026-09-28에 제품에서 뺐다(이슈 #48 범위 축소).
3294
- * 이름은 이행 방식이다 — `SHIPPING`이 택배 발송이듯 `MANUAL`은 셀러가 직접 제공한다는 뜻이다.
3295
- */
3296
- export declare const fulfillmentTypeSchema: z.ZodEnum<{
3297
- SHIPPING: "SHIPPING";
3298
- MANUAL: "MANUAL";
3299
- }>;
3300
- export type FulfillmentType = z.infer<typeof fulfillmentTypeSchema>;
3301
- /**
3302
- * 응답 스키마용 유형 — 서버가 나중에 유형을 더해도 옛 SDK가 응답 파싱에서 깨지지 않게 문자열로 받는다.
3303
- * 요청은 `fulfillmentTypeSchema`(닫힌 enum)로 검증한다.
3304
- */
3305
- export declare const fulfillmentTypeResponseSchema: z.ZodString;
3306
- /** 유형 하나의 규칙 — 배송·클레임이 이 표를 읽는다 */
3307
- export interface FulfillmentRule {
3308
- /** 택배 배송이 필요한가 — 배송비·배송지·발송 흐름의 대상인가 */
3309
- requiresShipping: boolean;
3310
- /** 반품에 수거가 필요한가 — 실물만 수거한다 */
3311
- requiresCollection: boolean;
3312
- /** 교환을 받는가 — 실물만 받는다 */
3313
- exchangeSupported: boolean;
3314
- }
3315
- /** 유형별 규칙표 — **유일한 원천이다.** */
3316
- export declare const FULFILLMENT_RULES: Readonly<Record<FulfillmentType, FulfillmentRule>>;
3317
- /**
3318
- * 저장된 값 → 유형. null·모르는 값은 `SHIPPING`이다 — 이 필드 이전의 상품·주문상품은 모두 배송 상품이었다.
3319
- */
3320
- export declare function fulfillmentTypeOf(value: string | null | undefined): FulfillmentType;
3321
- /** 유형의 규칙 — 모르는 값은 배송 상품 규칙이다 */
3322
- export declare function fulfillmentRuleOf(type: string | null | undefined): FulfillmentRule;
3323
- /** 택배 배송이 필요한가 — 배송비 묶음·배송지·발송 흐름의 판정은 이 함수 하나를 지난다 */
3324
- export declare function requiresShipping(type: string | null | undefined): boolean;
3325
- /** 반품에 수거가 필요한가 — 비실물 반품은 수거 등록·수거 완료 없이 승인한다 */
3326
- export declare function requiresCollection(type: string | null | undefined): boolean;
3327
- /**
3328
- * 배송이 없는 주문상품의 배송 묶음 키 (`order_items.delivery_bundle_key`).
3329
- *
3330
- * null로 두면 환불 정산이 #29 이전 주문의 레거시 폴백(「묶음 = 같은 상품」, 상품의 **현재** 배송비)을 탄다.
3331
- * 이 키를 만나면 배송비 환불·차감이 0이고 `orders.delivery_fee_settlements`에 항목을 만들지 않는다.
3332
- * 정책 지문 키(`b:…`)와 겹치지 않는다.
3333
- */
3334
- export declare const NO_SHIPPING_BUNDLE_KEY = "none";
3335
- /** 배송비 유형 — 무료·유료·조건부 무료 */
3336
- export declare const deliveryTypeSchema: z.ZodEnum<{
3337
- FREE: "FREE";
3338
- PAID: "PAID";
3339
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3340
- }>;
3341
- export type DeliveryType = z.infer<typeof deliveryTypeSchema>;
3342
- /**
3343
- * 상품 이행 — 등록(POST). 배송 상품의 `shipping`을 생략하면 기본값(유료 배송·상점 기본 배송비·기본 출고지·반품지)이다.
3344
- */
3345
- export declare const productFulfillmentCreateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3346
- type: z.ZodLiteral<"SHIPPING">;
3347
- shipping: z.ZodOptional<z.ZodObject<{
3348
- deliveryType: z.ZodDefault<z.ZodEnum<{
3349
- FREE: "FREE";
3350
- PAID: "PAID";
3351
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3352
- }>>;
3353
- deliveryFee: z.ZodOptional<z.ZodNumber>;
3354
- conditionalFreeAmount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3355
- shippingAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3356
- returnAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3357
- }, z.core.$strict>>;
3358
- }, z.core.$strict>, z.ZodObject<{
3359
- type: z.ZodLiteral<"MANUAL">;
3360
- }, z.core.$strict>], "type">;
3361
- export type ProductFulfillmentCreate = z.infer<typeof productFulfillmentCreateSchema>;
3362
- /** 등록 요청의 입력 모양 — 기본값이 채워지기 전(생략 가능한 필드가 optional) */
3363
- export type ProductFulfillmentCreateInput = z.input<typeof productFulfillmentCreateSchema>;
3364
- /**
3365
- * 상품 이행 — 수정(PUT·PATCH). 통째 교체이고 유형 키와 그 안의 필드가 **모두 필수**다. 서버는 현재 값과 병합하지 않는다.
3366
- * `fulfillment` 자체를 생략하면 이행을 바꾸지 않는다.
3367
- */
3368
- export declare const productFulfillmentUpdateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3369
- type: z.ZodLiteral<"SHIPPING">;
3370
- shipping: z.ZodObject<{
3371
- deliveryType: z.ZodEnum<{
3372
- FREE: "FREE";
3373
- PAID: "PAID";
3374
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3375
- }>;
3376
- deliveryFee: z.ZodNumber;
3377
- conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3378
- shippingAddressId: z.ZodNullable<z.ZodString>;
3379
- returnAddressId: z.ZodNullable<z.ZodString>;
3380
- }, z.core.$strict>;
3381
- }, z.core.$strict>, z.ZodObject<{
3382
- type: z.ZodLiteral<"MANUAL">;
3383
- }, z.core.$strict>], "type">;
3384
- export type ProductFulfillmentUpdate = z.infer<typeof productFulfillmentUpdateSchema>;
3385
- /**
3386
- * 저장된 상품 이행 — 알려진 유형의 닫힌 유니온. 서버의 상품 엔티티와 응답이 이 모양을 쓴다.
3387
- * 응답 파싱은 `productFulfillmentResponseSchema`(열린 유니온)를 쓴다.
3388
- */
3389
- export declare const productFulfillmentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3390
- type: z.ZodLiteral<"SHIPPING">;
3391
- shipping: z.ZodObject<{
3392
- deliveryType: z.ZodEnum<{
3393
- FREE: "FREE";
3394
- PAID: "PAID";
3395
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3396
- }>;
3397
- deliveryFee: z.ZodNumber;
3398
- conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3399
- shippingAddressId: z.ZodNullable<z.ZodString>;
3400
- returnAddressId: z.ZodNullable<z.ZodString>;
3401
- }, z.core.$strip>;
3402
- }, z.core.$strip>, z.ZodObject<{
3403
- type: z.ZodLiteral<"MANUAL">;
3404
- }, z.core.$strip>], "type">;
3405
- export type ProductFulfillment = z.infer<typeof productFulfillmentSchema>;
3406
- /** 유형 이름 → 그 유형의 저장된 이행 */
3407
- export type ProductFulfillmentOf<T extends FulfillmentType> = Extract<ProductFulfillment, {
3408
- type: T;
3409
- }>;
3410
- /** 응답이 알려 주는 모르는 유형 — SDK가 아직 모르는 유형(서버가 나중에 더한 유형) */
3411
- export interface UnknownFulfillment {
3412
- type: "OTHER";
3413
- /** 서버가 보낸 유형 이름 */
3414
- rawType: string;
3415
- }
3416
- /**
3417
- * 열린 응답 유니온 — 알려진 유형은 판별 유니온으로 검사하고, **모르는 유형만** `{ type: "OTHER", rawType }`로 읽는다.
3418
- *
3419
- * `type: z.string()` 가지를 그대로 두면 TS가 `type === "SHIPPING"`으로 좁혀도 문자열 가지가 남는다. `OTHER` 리터럴로 바꿔 좁히기를
3420
- * 지킨다. 알려진 유형의 모양이 틀린 응답은 폴백으로 숨기지 않고 파싱 오류로 둔다.
3421
- */
3422
- export declare function openFulfillmentUnion<T extends z.ZodType>(known: T): z.ZodUnion<readonly [T, z.ZodPipe<z.ZodObject<{
3423
- type: z.ZodString;
3424
- }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3425
- [x: string]: unknown;
3426
- type: string;
3427
- }>>]>;
3428
- export declare const productFulfillmentResponseSchema: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3429
- type: z.ZodLiteral<"SHIPPING">;
3430
- shipping: z.ZodObject<{
3431
- deliveryType: z.ZodEnum<{
3432
- FREE: "FREE";
3433
- PAID: "PAID";
3434
- CONDITIONAL_FREE: "CONDITIONAL_FREE";
3435
- }>;
3436
- deliveryFee: z.ZodNumber;
3437
- conditionalFreeAmount: z.ZodNullable<z.ZodNumber>;
3438
- shippingAddressId: z.ZodNullable<z.ZodString>;
3439
- returnAddressId: z.ZodNullable<z.ZodString>;
3440
- }, z.core.$strip>;
3441
- }, z.core.$strip>, z.ZodObject<{
3442
- type: z.ZodLiteral<"MANUAL">;
3443
- }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3444
- type: z.ZodString;
3445
- }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3446
- [x: string]: unknown;
3447
- type: string;
3448
- }>>]>;
3449
- export type ProductFulfillmentView = z.infer<typeof productFulfillmentResponseSchema>;
3450
- /**
3451
- * 주문상품의 주문 시점 이행 — 결제 확정이 주문서 줄에서 굳힌다. 상품의 현재 값이 아니다. 서버는 주문상품 컬럼
3452
- * (`fulfillment_type`·`delivery_bundle_key`)과 jsonb(`fulfillment_snapshot`)를 합쳐 이 모양을 만든다.
3453
- */
3454
- export declare const orderItemFulfillmentSnapshotSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3455
- type: z.ZodLiteral<"SHIPPING">;
3456
- shipping: z.ZodObject<{
3457
- bundleKey: z.ZodNullable<z.ZodString>;
3458
- returnAddressId: z.ZodNullable<z.ZodString>;
3459
- }, z.core.$strip>;
3460
- }, z.core.$strip>, z.ZodObject<{
3461
- type: z.ZodLiteral<"MANUAL">;
3462
- }, z.core.$strip>], "type">;
3463
- export type OrderItemFulfillmentSnapshot = z.infer<typeof orderItemFulfillmentSnapshotSchema>;
3464
- export declare const orderItemFulfillmentSnapshotResponseSchema: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3465
- type: z.ZodLiteral<"SHIPPING">;
3466
- shipping: z.ZodObject<{
3467
- bundleKey: z.ZodNullable<z.ZodString>;
3468
- returnAddressId: z.ZodNullable<z.ZodString>;
3469
- }, z.core.$strip>;
3470
- }, z.core.$strip>, z.ZodObject<{
3471
- type: z.ZodLiteral<"MANUAL">;
3472
- }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3473
- type: z.ZodString;
3474
- }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
3475
- [x: string]: unknown;
3476
- type: string;
3477
- }>>]>;
3478
- export type OrderItemFulfillmentSnapshotView = z.infer<typeof orderItemFulfillmentSnapshotResponseSchema>;
3479
- //#endregion
3480
4022
  //#region src/schemas/order.d.ts
3481
4023
  export declare const orderSummarySchema: z.ZodObject<{
3482
4024
  orderId: z.ZodString;
@@ -3548,7 +4090,17 @@ export declare const orderItemSchema: z.ZodObject<{
3548
4090
  customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3549
4091
  label: z.ZodString;
3550
4092
  value: z.ZodString;
4093
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4094
+ type: z.ZodOptional<z.ZodString>;
3551
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>>;
3552
4104
  sellerCode: z.ZodNullable<z.ZodString>;
3553
4105
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3554
4106
  type: z.ZodLiteral<"SHIPPING">;
@@ -3556,8 +4108,24 @@ export declare const orderItemSchema: z.ZodObject<{
3556
4108
  bundleKey: z.ZodNullable<z.ZodString>;
3557
4109
  returnAddressId: z.ZodNullable<z.ZodString>;
3558
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>>;
3559
4119
  }, z.core.$strip>, z.ZodObject<{
3560
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>>;
3561
4129
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3562
4130
  type: z.ZodString;
3563
4131
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -3711,7 +4279,17 @@ export declare const orderSchema: z.ZodObject<{
3711
4279
  customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3712
4280
  label: z.ZodString;
3713
4281
  value: z.ZodString;
4282
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4283
+ type: z.ZodOptional<z.ZodString>;
3714
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>>;
3715
4293
  sellerCode: z.ZodNullable<z.ZodString>;
3716
4294
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3717
4295
  type: z.ZodLiteral<"SHIPPING">;
@@ -3719,8 +4297,24 @@ export declare const orderSchema: z.ZodObject<{
3719
4297
  bundleKey: z.ZodNullable<z.ZodString>;
3720
4298
  returnAddressId: z.ZodNullable<z.ZodString>;
3721
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>>;
3722
4308
  }, z.core.$strip>, z.ZodObject<{
3723
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>>;
3724
4318
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3725
4319
  type: z.ZodString;
3726
4320
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -3830,7 +4424,17 @@ export declare const orderItemPageSchema: z.ZodObject<{
3830
4424
  customInputs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
3831
4425
  label: z.ZodString;
3832
4426
  value: z.ZodString;
4427
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4428
+ type: z.ZodOptional<z.ZodString>;
3833
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>>;
3834
4438
  sellerCode: z.ZodNullable<z.ZodString>;
3835
4439
  fulfillmentSnapshot: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
3836
4440
  type: z.ZodLiteral<"SHIPPING">;
@@ -3838,8 +4442,24 @@ export declare const orderItemPageSchema: z.ZodObject<{
3838
4442
  bundleKey: z.ZodNullable<z.ZodString>;
3839
4443
  returnAddressId: z.ZodNullable<z.ZodString>;
3840
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>>;
3841
4453
  }, z.core.$strip>, z.ZodObject<{
3842
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>>;
3843
4463
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
3844
4464
  type: z.ZodString;
3845
4465
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -3959,16 +4579,16 @@ export interface OrderItemListParams extends PageParams {
3959
4579
  testPayment?: "true" | "false";
3960
4580
  }
3961
4581
  export declare const deliveryMethodSchema: z.ZodEnum<{
3962
- COURIER: "COURIER";
3963
4582
  DIRECT: "DIRECT";
4583
+ COURIER: "COURIER";
3964
4584
  QUICK: "QUICK";
3965
4585
  NOTHING: "NOTHING";
3966
4586
  }>;
3967
4587
  export type DeliveryMethod = z.infer<typeof deliveryMethodSchema>;
3968
4588
  export declare const dispatchRequestSchema: z.ZodObject<{
3969
4589
  deliveryMethod: z.ZodEnum<{
3970
- COURIER: "COURIER";
3971
4590
  DIRECT: "DIRECT";
4591
+ COURIER: "COURIER";
3972
4592
  QUICK: "QUICK";
3973
4593
  NOTHING: "NOTHING";
3974
4594
  }>;
@@ -3980,8 +4600,8 @@ export type DispatchRequest = z.infer<typeof dispatchRequestSchema>;
3980
4600
  export declare const deliveryInfoSchema: z.ZodObject<{
3981
4601
  orderItemId: z.ZodString;
3982
4602
  deliveryMethod: z.ZodEnum<{
3983
- COURIER: "COURIER";
3984
4603
  DIRECT: "DIRECT";
4604
+ COURIER: "COURIER";
3985
4605
  QUICK: "QUICK";
3986
4606
  NOTHING: "NOTHING";
3987
4607
  }>;
@@ -4007,8 +4627,8 @@ export declare const trackingStageResponseSchema: z.ZodString;
4007
4627
  export declare const deliveryStatusSchema: z.ZodObject<{
4008
4628
  orderItemId: z.ZodString;
4009
4629
  deliveryMethod: z.ZodEnum<{
4010
- COURIER: "COURIER";
4011
4630
  DIRECT: "DIRECT";
4631
+ COURIER: "COURIER";
4012
4632
  QUICK: "QUICK";
4013
4633
  NOTHING: "NOTHING";
4014
4634
  }>;
@@ -5532,6 +6152,7 @@ export declare const productVariantSchema: z.ZodObject<{
5532
6152
  weightGram: z.ZodNullable<z.ZodNumber>;
5533
6153
  sellerCode: z.ZodNullable<z.ZodString>;
5534
6154
  usable: z.ZodBoolean;
6155
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5535
6156
  hasOrders: z.ZodOptional<z.ZodBoolean>;
5536
6157
  }, z.core.$strip>;
5537
6158
  export type ProductVariant = z.infer<typeof productVariantSchema>;
@@ -5584,6 +6205,12 @@ export declare const addonGroupSchema: z.ZodObject<{
5584
6205
  }, z.core.$strip>>;
5585
6206
  }, z.core.$strip>;
5586
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"];
5587
6214
  /** 직접 입력 항목 — 예: 각인 문구 */
5588
6215
  export declare const customInputSchema: z.ZodObject<{
5589
6216
  inputId: z.ZodString;
@@ -5593,6 +6220,9 @@ export declare const customInputSchema: z.ZodObject<{
5593
6220
  required: z.ZodBoolean;
5594
6221
  usable: z.ZodBoolean;
5595
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>>>;
5596
6226
  }, z.core.$strip>;
5597
6227
  export type CustomInput = z.infer<typeof customInputSchema>;
5598
6228
  /**
@@ -5631,6 +6261,16 @@ export declare const customInputRequestSchema: z.ZodObject<{
5631
6261
  maxLength: z.ZodNumber;
5632
6262
  required: z.ZodDefault<z.ZodBoolean>;
5633
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>>>;
5634
6274
  }, z.core.$strip>;
5635
6275
  export type CustomInputRequest = z.infer<typeof customInputRequestSchema>;
5636
6276
  /**
@@ -5648,6 +6288,8 @@ export type OptionSelection = z.infer<typeof optionSelectionSchema>;
5648
6288
  export declare const customInputValueSchema: z.ZodObject<{
5649
6289
  label: z.ZodString;
5650
6290
  value: z.ZodString;
6291
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6292
+ type: z.ZodOptional<z.ZodString>;
5651
6293
  }, z.core.$strip>;
5652
6294
  export type CustomInputValue = z.infer<typeof customInputValueSchema>;
5653
6295
  export declare const discountSchema: z.ZodObject<{
@@ -5712,6 +6354,7 @@ export declare const productSchema: z.ZodObject<{
5712
6354
  weightGram: z.ZodNullable<z.ZodNumber>;
5713
6355
  sellerCode: z.ZodNullable<z.ZodString>;
5714
6356
  usable: z.ZodBoolean;
6357
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5715
6358
  hasOrders: z.ZodOptional<z.ZodBoolean>;
5716
6359
  }, z.core.$strip>>;
5717
6360
  addonGroups: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -5735,6 +6378,9 @@ export declare const productSchema: z.ZodObject<{
5735
6378
  required: z.ZodBoolean;
5736
6379
  usable: z.ZodBoolean;
5737
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>>>;
5738
6384
  }, z.core.$strip>>>>;
5739
6385
  optionSort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
5740
6386
  REGISTERED: "REGISTERED";
@@ -5755,14 +6401,17 @@ export declare const productSchema: z.ZodObject<{
5755
6401
  shippingAddressId: z.ZodNullable<z.ZodString>;
5756
6402
  returnAddressId: z.ZodNullable<z.ZodString>;
5757
6403
  }, z.core.$strip>;
6404
+ methods: z.ZodOptional<z.ZodArray<z.ZodString>>;
5758
6405
  }, z.core.$strip>, z.ZodObject<{
5759
6406
  type: z.ZodLiteral<"MANUAL">;
6407
+ methods: z.ZodOptional<z.ZodArray<z.ZodString>>;
5760
6408
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
5761
6409
  type: z.ZodString;
5762
6410
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
5763
6411
  [x: string]: unknown;
5764
6412
  type: string;
5765
6413
  }>>]>;
6414
+ inventoryMode: z.ZodOptional<z.ZodString>;
5766
6415
  fulfillmentTypeLocked: z.ZodBoolean;
5767
6416
  refundPolicy: z.ZodNullable<z.ZodObject<{
5768
6417
  preShipmentDeliveryFeeRefund: z.ZodOptional<z.ZodBoolean>;
@@ -5837,6 +6486,7 @@ export declare const productVariantRequestSchema: z.ZodObject<{
5837
6486
  weightGram: z.ZodOptional<z.ZodNumber>;
5838
6487
  sellerCode: z.ZodOptional<z.ZodString>;
5839
6488
  usable: z.ZodDefault<z.ZodBoolean>;
6489
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5840
6490
  }, z.core.$strip>;
5841
6491
  export type ProductVariantRequest = z.infer<typeof productVariantRequestSchema>;
5842
6492
  /** 축 × 값 → variant 전체 교체 요청 (PUT /products/{productId}/options) */
@@ -5860,6 +6510,7 @@ export declare const optionModelRequestSchema: z.ZodObject<{
5860
6510
  weightGram: z.ZodOptional<z.ZodNumber>;
5861
6511
  sellerCode: z.ZodOptional<z.ZodString>;
5862
6512
  usable: z.ZodDefault<z.ZodBoolean>;
6513
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5863
6514
  }, z.core.$strip>>;
5864
6515
  addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
5865
6516
  groupId: z.ZodOptional<z.ZodString>;
@@ -5879,6 +6530,16 @@ export declare const optionModelRequestSchema: z.ZodObject<{
5879
6530
  maxLength: z.ZodNumber;
5880
6531
  required: z.ZodDefault<z.ZodBoolean>;
5881
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>>>;
5882
6543
  }, z.core.$strip>>>;
5883
6544
  optionSort: z.ZodOptional<z.ZodEnum<{
5884
6545
  REGISTERED: "REGISTERED";
@@ -5913,6 +6574,7 @@ export declare const optionModelSchema: z.ZodObject<{
5913
6574
  weightGram: z.ZodNullable<z.ZodNumber>;
5914
6575
  sellerCode: z.ZodNullable<z.ZodString>;
5915
6576
  usable: z.ZodBoolean;
6577
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5916
6578
  hasOrders: z.ZodOptional<z.ZodBoolean>;
5917
6579
  }, z.core.$strip>>;
5918
6580
  addonGroups: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -5936,6 +6598,9 @@ export declare const optionModelSchema: z.ZodObject<{
5936
6598
  required: z.ZodBoolean;
5937
6599
  usable: z.ZodBoolean;
5938
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>>>;
5939
6604
  }, z.core.$strip>>>>;
5940
6605
  optionSort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
5941
6606
  REGISTERED: "REGISTERED";
@@ -5979,10 +6644,26 @@ export declare const productCreateRequestSchema: z.ZodObject<{
5979
6644
  shippingAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5980
6645
  returnAddressId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5981
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
+ }>>>;
5982
6653
  }, z.core.$strict>, z.ZodObject<{
5983
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
+ }>>>;
5984
6661
  }, z.core.$strict>], "type">>;
5985
6662
  sourceOptionSetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
6663
+ inventoryMode: z.ZodOptional<z.ZodEnum<{
6664
+ STANDARD: "STANDARD";
6665
+ DATED: "DATED";
6666
+ }>>;
5986
6667
  optionGroups: z.ZodDefault<z.ZodArray<z.ZodObject<{
5987
6668
  groupId: z.ZodOptional<z.ZodString>;
5988
6669
  name: z.ZodString;
@@ -6002,6 +6683,7 @@ export declare const productCreateRequestSchema: z.ZodObject<{
6002
6683
  weightGram: z.ZodOptional<z.ZodNumber>;
6003
6684
  sellerCode: z.ZodOptional<z.ZodString>;
6004
6685
  usable: z.ZodDefault<z.ZodBoolean>;
6686
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
6005
6687
  }, z.core.$strip>>;
6006
6688
  addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
6007
6689
  groupId: z.ZodOptional<z.ZodString>;
@@ -6021,6 +6703,16 @@ export declare const productCreateRequestSchema: z.ZodObject<{
6021
6703
  maxLength: z.ZodNumber;
6022
6704
  required: z.ZodDefault<z.ZodBoolean>;
6023
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>>>;
6024
6716
  }, z.core.$strip>>>;
6025
6717
  optionSort: z.ZodOptional<z.ZodEnum<{
6026
6718
  REGISTERED: "REGISTERED";
@@ -6065,10 +6757,26 @@ export declare const productReplaceRequestSchema: z.ZodObject<{
6065
6757
  shippingAddressId: z.ZodNullable<z.ZodString>;
6066
6758
  returnAddressId: z.ZodNullable<z.ZodString>;
6067
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
+ }>>>;
6068
6766
  }, z.core.$strict>, z.ZodObject<{
6069
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
+ }>>>;
6070
6774
  }, z.core.$strict>], "type">>;
6071
6775
  sourceOptionSetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
6776
+ inventoryMode: z.ZodOptional<z.ZodEnum<{
6777
+ STANDARD: "STANDARD";
6778
+ DATED: "DATED";
6779
+ }>>;
6072
6780
  optionGroups: z.ZodDefault<z.ZodArray<z.ZodObject<{
6073
6781
  groupId: z.ZodOptional<z.ZodString>;
6074
6782
  name: z.ZodString;
@@ -6088,6 +6796,7 @@ export declare const productReplaceRequestSchema: z.ZodObject<{
6088
6796
  weightGram: z.ZodOptional<z.ZodNumber>;
6089
6797
  sellerCode: z.ZodOptional<z.ZodString>;
6090
6798
  usable: z.ZodDefault<z.ZodBoolean>;
6799
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
6091
6800
  }, z.core.$strip>>;
6092
6801
  addonGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
6093
6802
  groupId: z.ZodOptional<z.ZodString>;
@@ -6107,6 +6816,16 @@ export declare const productReplaceRequestSchema: z.ZodObject<{
6107
6816
  maxLength: z.ZodNumber;
6108
6817
  required: z.ZodDefault<z.ZodBoolean>;
6109
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>>>;
6110
6829
  }, z.core.$strip>>>;
6111
6830
  optionSort: z.ZodOptional<z.ZodEnum<{
6112
6831
  REGISTERED: "REGISTERED";
@@ -6159,8 +6878,20 @@ export declare const productPatchRequestSchema: z.ZodObject<{
6159
6878
  shippingAddressId: z.ZodNullable<z.ZodString>;
6160
6879
  returnAddressId: z.ZodNullable<z.ZodString>;
6161
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
+ }>>>;
6162
6887
  }, z.core.$strict>, z.ZodObject<{
6163
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
+ }>>>;
6164
6895
  }, z.core.$strict>], "type">>;
6165
6896
  refundPolicy: z.ZodOptional<z.ZodNullable<z.ZodObject<{
6166
6897
  preShipmentDeliveryFeeRefund: z.ZodOptional<z.ZodBoolean>;
@@ -6258,6 +6989,9 @@ export declare const savedCustomInputSchema: z.ZodObject<{
6258
6989
  placeholder: z.ZodNullable<z.ZodString>;
6259
6990
  maxLength: z.ZodNumber;
6260
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>>>;
6261
6995
  }, z.core.$strip>;
6262
6996
  export type SavedCustomInput = z.infer<typeof savedCustomInputSchema>;
6263
6997
  export declare const savedOptionSetSchema: z.ZodObject<{
@@ -6283,6 +7017,9 @@ export declare const savedOptionSetSchema: z.ZodObject<{
6283
7017
  placeholder: z.ZodNullable<z.ZodString>;
6284
7018
  maxLength: z.ZodNumber;
6285
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>>>;
6286
7023
  }, z.core.$strip>>;
6287
7024
  importedProductCount: z.ZodNumber;
6288
7025
  createdAt: z.ZodString;
@@ -6311,6 +7048,16 @@ export declare const savedCustomInputRequestSchema: z.ZodObject<{
6311
7048
  placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6312
7049
  maxLength: z.ZodNumber;
6313
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>>>;
6314
7061
  }, z.core.$strip>;
6315
7062
  /**
6316
7063
  * 저장 옵션 만들기·수정 본문. 조합 옵션명은 최대 `MAX_OPTION_GROUPS`개, 추가 선택은 최대 `MAX_ADDON_GROUPS`개이고
@@ -6341,6 +7088,16 @@ export declare const savedOptionSetRequestSchema: z.ZodObject<{
6341
7088
  placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6342
7089
  maxLength: z.ZodNumber;
6343
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>>>;
6344
7101
  }, z.core.$strip>>>;
6345
7102
  }, z.core.$strip>;
6346
7103
  export type SavedOptionSetRequest = z.infer<typeof savedOptionSetRequestSchema>;
@@ -6384,6 +7141,9 @@ export declare const savedOptionSetFromProductResultSchema: z.ZodObject<{
6384
7141
  placeholder: z.ZodNullable<z.ZodString>;
6385
7142
  maxLength: z.ZodNumber;
6386
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>>>;
6387
7147
  }, z.core.$strip>>;
6388
7148
  importedProductCount: z.ZodNumber;
6389
7149
  createdAt: z.ZodString;
@@ -6426,6 +7186,67 @@ export declare const savedOptionSetListQuerySchema: z.ZodObject<{
6426
7186
  }>>;
6427
7187
  }, z.core.$strip>;
6428
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
6429
7250
  //#region src/schemas/store.d.ts
6430
7251
  /**
6431
7252
  * 상점 코드 규칙 — 스토어프론트 API가 테넌트를 가르는 값이다(`X-Store-Code` 헤더).
@@ -8069,10 +8890,12 @@ export type StorefrontSourceReplaced = z.infer<typeof storefrontSourceReplacedSc
8069
8890
  *
8070
8891
  * - `product-image`: 상품 목록·상세의 상품 이미지. 목록 썸네일로 쓰이므로 정지 이미지만 받는다.
8071
8892
  * - `description`: 상세설명 본문에 삽입하는 미디어. 동영상과 svg도 받는다.
8893
+ * - `flow-attachment`: 주문 흐름 행동의 첨부(시안 등, 이슈 #115). 구매자에게 보이므로 정지 이미지와 PDF만 받는다.
8072
8894
  */
8073
8895
  export declare const uploadPurposeSchema: z.ZodEnum<{
8074
8896
  "product-image": "product-image";
8075
8897
  description: "description";
8898
+ "flow-attachment": "flow-attachment";
8076
8899
  }>;
8077
8900
  export type UploadPurpose = z.infer<typeof uploadPurposeSchema>;
8078
8901
  export interface UploadPurposeLimit {
@@ -8112,6 +8935,7 @@ export declare const uploadRequestSchema: z.ZodObject<{
8112
8935
  purpose: z.ZodDefault<z.ZodEnum<{
8113
8936
  "product-image": "product-image";
8114
8937
  description: "description";
8938
+ "flow-attachment": "flow-attachment";
8115
8939
  }>>;
8116
8940
  size: z.ZodOptional<z.ZodNumber>;
8117
8941
  }, z.core.$strip>;
@@ -8386,6 +9210,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8386
9210
  weightGram: number | null;
8387
9211
  sellerCode: string | null;
8388
9212
  usable: boolean;
9213
+ attributes?: Record<string, string> | undefined;
8389
9214
  hasOrders?: boolean | undefined;
8390
9215
  }[];
8391
9216
  addonGroups: {
@@ -8409,6 +9234,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8409
9234
  required: boolean;
8410
9235
  usable: boolean;
8411
9236
  sortOrder: number;
9237
+ key?: string | null | undefined;
9238
+ type?: string | undefined;
9239
+ options?: string[] | null | undefined;
8412
9240
  }[];
8413
9241
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8414
9242
  fulfillment: UnknownFulfillment | {
@@ -8420,8 +9248,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
8420
9248
  shippingAddressId: string | null;
8421
9249
  returnAddressId: string | null;
8422
9250
  };
9251
+ methods?: string[] | undefined;
8423
9252
  } | {
8424
9253
  type: "MANUAL";
9254
+ methods?: string[] | undefined;
8425
9255
  };
8426
9256
  fulfillmentTypeLocked: boolean;
8427
9257
  refundPolicy: {
@@ -8441,6 +9271,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8441
9271
  attributeId: string;
8442
9272
  value: string;
8443
9273
  }[] | undefined;
9274
+ inventoryMode?: string | undefined;
8444
9275
  discount?: {
8445
9276
  productId: string;
8446
9277
  discountType: "RATE" | "AMOUNT";
@@ -8486,6 +9317,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8486
9317
  weightGram: number | null;
8487
9318
  sellerCode: string | null;
8488
9319
  usable: boolean;
9320
+ attributes?: Record<string, string> | undefined;
8489
9321
  hasOrders?: boolean | undefined;
8490
9322
  }[];
8491
9323
  addonGroups: {
@@ -8509,6 +9341,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8509
9341
  required: boolean;
8510
9342
  usable: boolean;
8511
9343
  sortOrder: number;
9344
+ key?: string | null | undefined;
9345
+ type?: string | undefined;
9346
+ options?: string[] | null | undefined;
8512
9347
  }[];
8513
9348
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8514
9349
  fulfillment: UnknownFulfillment | {
@@ -8520,8 +9355,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
8520
9355
  shippingAddressId: string | null;
8521
9356
  returnAddressId: string | null;
8522
9357
  };
9358
+ methods?: string[] | undefined;
8523
9359
  } | {
8524
9360
  type: "MANUAL";
9361
+ methods?: string[] | undefined;
8525
9362
  };
8526
9363
  fulfillmentTypeLocked: boolean;
8527
9364
  refundPolicy: {
@@ -8541,6 +9378,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8541
9378
  attributeId: string;
8542
9379
  value: string;
8543
9380
  }[] | undefined;
9381
+ inventoryMode?: string | undefined;
8544
9382
  discount?: {
8545
9383
  productId: string;
8546
9384
  discountType: "RATE" | "AMOUNT";
@@ -8586,6 +9424,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8586
9424
  weightGram: number | null;
8587
9425
  sellerCode: string | null;
8588
9426
  usable: boolean;
9427
+ attributes?: Record<string, string> | undefined;
8589
9428
  hasOrders?: boolean | undefined;
8590
9429
  }[];
8591
9430
  addonGroups: {
@@ -8609,6 +9448,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8609
9448
  required: boolean;
8610
9449
  usable: boolean;
8611
9450
  sortOrder: number;
9451
+ key?: string | null | undefined;
9452
+ type?: string | undefined;
9453
+ options?: string[] | null | undefined;
8612
9454
  }[];
8613
9455
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8614
9456
  fulfillment: UnknownFulfillment | {
@@ -8620,8 +9462,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
8620
9462
  shippingAddressId: string | null;
8621
9463
  returnAddressId: string | null;
8622
9464
  };
9465
+ methods?: string[] | undefined;
8623
9466
  } | {
8624
9467
  type: "MANUAL";
9468
+ methods?: string[] | undefined;
8625
9469
  };
8626
9470
  fulfillmentTypeLocked: boolean;
8627
9471
  refundPolicy: {
@@ -8641,6 +9485,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8641
9485
  attributeId: string;
8642
9486
  value: string;
8643
9487
  }[] | undefined;
9488
+ inventoryMode?: string | undefined;
8644
9489
  discount?: {
8645
9490
  productId: string;
8646
9491
  discountType: "RATE" | "AMOUNT";
@@ -8688,6 +9533,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8688
9533
  weightGram: number | null;
8689
9534
  sellerCode: string | null;
8690
9535
  usable: boolean;
9536
+ attributes?: Record<string, string> | undefined;
8691
9537
  hasOrders?: boolean | undefined;
8692
9538
  }[];
8693
9539
  addonGroups: {
@@ -8711,6 +9557,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8711
9557
  required: boolean;
8712
9558
  usable: boolean;
8713
9559
  sortOrder: number;
9560
+ key?: string | null | undefined;
9561
+ type?: string | undefined;
9562
+ options?: string[] | null | undefined;
8714
9563
  }[];
8715
9564
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8716
9565
  }>;
@@ -8742,6 +9591,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
8742
9591
  weightGram: number | null;
8743
9592
  sellerCode: string | null;
8744
9593
  usable: boolean;
9594
+ attributes?: Record<string, string> | undefined;
8745
9595
  hasOrders?: boolean | undefined;
8746
9596
  }[];
8747
9597
  addonGroups: {
@@ -8765,6 +9615,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8765
9615
  required: boolean;
8766
9616
  usable: boolean;
8767
9617
  sortOrder: number;
9618
+ key?: string | null | undefined;
9619
+ type?: string | undefined;
9620
+ options?: string[] | null | undefined;
8768
9621
  }[];
8769
9622
  optionSort: "REGISTERED" | "NAME" | "PRICE_ASC" | "PRICE_DESC";
8770
9623
  }>;
@@ -8790,6 +9643,17 @@ export declare function createStoreClient(options: StoreClientOptions): {
8790
9643
  endAt: string | null;
8791
9644
  }>;
8792
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
+ }>;
8793
9657
  };
8794
9658
  /**
8795
9659
  * 저장 옵션 (이슈 #59) — 자주 쓰는 옵션 구성. 불러오기는 복사라 저장 옵션을 고쳐도 불러온 상품은 바뀌지 않는다.
@@ -8819,6 +9683,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8819
9683
  placeholder: string | null;
8820
9684
  maxLength: number;
8821
9685
  required: boolean;
9686
+ key?: string | null | undefined;
9687
+ type?: string | undefined;
9688
+ options?: string[] | null | undefined;
8822
9689
  }[];
8823
9690
  importedProductCount: number;
8824
9691
  createdAt: string;
@@ -8843,6 +9710,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8843
9710
  placeholder: string | null;
8844
9711
  maxLength: number;
8845
9712
  required: boolean;
9713
+ key?: string | null | undefined;
9714
+ type?: string | undefined;
9715
+ options?: string[] | null | undefined;
8846
9716
  }[];
8847
9717
  importedProductCount: number;
8848
9718
  createdAt: string;
@@ -8867,6 +9737,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8867
9737
  placeholder: string | null;
8868
9738
  maxLength: number;
8869
9739
  required: boolean;
9740
+ key?: string | null | undefined;
9741
+ type?: string | undefined;
9742
+ options?: string[] | null | undefined;
8870
9743
  }[];
8871
9744
  importedProductCount: number;
8872
9745
  createdAt: string;
@@ -8891,6 +9764,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8891
9764
  placeholder: string | null;
8892
9765
  maxLength: number;
8893
9766
  required: boolean;
9767
+ key?: string | null | undefined;
9768
+ type?: string | undefined;
9769
+ options?: string[] | null | undefined;
8894
9770
  }[];
8895
9771
  importedProductCount: number;
8896
9772
  createdAt: string;
@@ -8917,6 +9793,9 @@ export declare function createStoreClient(options: StoreClientOptions): {
8917
9793
  placeholder: string | null;
8918
9794
  maxLength: number;
8919
9795
  required: boolean;
9796
+ key?: string | null | undefined;
9797
+ type?: string | undefined;
9798
+ options?: string[] | null | undefined;
8920
9799
  }[];
8921
9800
  importedProductCount: number;
8922
9801
  createdAt: string;
@@ -9486,6 +10365,8 @@ export declare function createStoreClient(options: StoreClientOptions): {
9486
10365
  customInputs: {
9487
10366
  label: string;
9488
10367
  value: string;
10368
+ key?: string | null | undefined;
10369
+ type?: string | undefined;
9489
10370
  }[];
9490
10371
  sellerCode: string | null;
9491
10372
  fulfillmentSnapshot: UnknownFulfillment | {
@@ -9494,8 +10375,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
9494
10375
  bundleKey: string | null;
9495
10376
  returnAddressId: string | null;
9496
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;
9497
10386
  } | {
9498
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;
9499
10396
  };
9500
10397
  quantity: number;
9501
10398
  canceledQuantity: number;
@@ -9521,6 +10418,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
9521
10418
  lastChangedAt: string;
9522
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";
9523
10420
  testPayment: boolean;
10421
+ stay?: {
10422
+ checkIn: string;
10423
+ checkOut: string;
10424
+ nights: {
10425
+ date: string;
10426
+ price: number;
10427
+ }[];
10428
+ } | undefined;
9524
10429
  }[];
9525
10430
  }>;
9526
10431
  /**
@@ -9573,6 +10478,8 @@ export declare function createStoreClient(options: StoreClientOptions): {
9573
10478
  customInputs: {
9574
10479
  label: string;
9575
10480
  value: string;
10481
+ key?: string | null | undefined;
10482
+ type?: string | undefined;
9576
10483
  }[];
9577
10484
  sellerCode: string | null;
9578
10485
  fulfillmentSnapshot: UnknownFulfillment | {
@@ -9581,8 +10488,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
9581
10488
  bundleKey: string | null;
9582
10489
  returnAddressId: string | null;
9583
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;
9584
10499
  } | {
9585
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;
9586
10509
  };
9587
10510
  quantity: number;
9588
10511
  canceledQuantity: number;
@@ -9608,6 +10531,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
9608
10531
  lastChangedAt: string;
9609
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";
9610
10533
  testPayment: boolean;
10534
+ stay?: {
10535
+ checkIn: string;
10536
+ checkOut: string;
10537
+ nights: {
10538
+ date: string;
10539
+ price: number;
10540
+ }[];
10541
+ } | undefined;
9611
10542
  }[];
9612
10543
  }>;
9613
10544
  confirm: (orderItemId: string, idempotencyKey?: string) => Promise<void>;
@@ -9644,7 +10575,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
9644
10575
  }>;
9645
10576
  dispatch: (orderItemId: string, body: DispatchRequest, idempotencyKey?: string) => Promise<{
9646
10577
  orderItemId: string;
9647
- deliveryMethod: "COURIER" | "DIRECT" | "QUICK" | "NOTHING";
10578
+ deliveryMethod: "DIRECT" | "COURIER" | "QUICK" | "NOTHING";
9648
10579
  carrierCode: string | null;
9649
10580
  carrierName: string | null;
9650
10581
  trackingNumber: string | null;
@@ -9689,6 +10620,8 @@ export declare function createStoreClient(options: StoreClientOptions): {
9689
10620
  customInputs: {
9690
10621
  label: string;
9691
10622
  value: string;
10623
+ key?: string | null | undefined;
10624
+ type?: string | undefined;
9692
10625
  }[];
9693
10626
  sellerCode: string | null;
9694
10627
  fulfillmentSnapshot: UnknownFulfillment | {
@@ -9697,8 +10630,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
9697
10630
  bundleKey: string | null;
9698
10631
  returnAddressId: string | null;
9699
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;
9700
10641
  } | {
9701
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;
9702
10651
  };
9703
10652
  quantity: number;
9704
10653
  canceledQuantity: number;
@@ -9724,6 +10673,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
9724
10673
  lastChangedAt: string;
9725
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";
9726
10675
  testPayment: boolean;
10676
+ stay?: {
10677
+ checkIn: string;
10678
+ checkOut: string;
10679
+ nights: {
10680
+ date: string;
10681
+ price: number;
10682
+ }[];
10683
+ } | undefined;
9727
10684
  }>;
9728
10685
  /** 배송완료 일괄 처리 — 항목별 부분 성공이다 */
9729
10686
  markDeliveredBulk: (orderItemIds: string[], idempotencyKey?: string) => Promise<{
@@ -9759,6 +10716,8 @@ export declare function createStoreClient(options: StoreClientOptions): {
9759
10716
  customInputs: {
9760
10717
  label: string;
9761
10718
  value: string;
10719
+ key?: string | null | undefined;
10720
+ type?: string | undefined;
9762
10721
  }[];
9763
10722
  sellerCode: string | null;
9764
10723
  fulfillmentSnapshot: UnknownFulfillment | {
@@ -9767,8 +10726,24 @@ export declare function createStoreClient(options: StoreClientOptions): {
9767
10726
  bundleKey: string | null;
9768
10727
  returnAddressId: string | null;
9769
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;
9770
10737
  } | {
9771
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;
9772
10747
  };
9773
10748
  quantity: number;
9774
10749
  canceledQuantity: number;
@@ -9794,6 +10769,14 @@ export declare function createStoreClient(options: StoreClientOptions): {
9794
10769
  lastChangedAt: string;
9795
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";
9796
10771
  testPayment: boolean;
10772
+ stay?: {
10773
+ checkIn: string;
10774
+ checkOut: string;
10775
+ nights: {
10776
+ date: string;
10777
+ price: number;
10778
+ }[];
10779
+ } | undefined;
9797
10780
  }>;
9798
10781
  /** 제공 처리 일괄 — 항목별 부분 성공이다 */
9799
10782
  fulfillBulk: (orderItemIds: string[], body?: FulfillRequest, idempotencyKey?: string) => Promise<{
@@ -9808,7 +10791,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
9808
10791
  }>;
9809
10792
  getDelivery: (orderItemId: string) => Promise<{
9810
10793
  orderItemId: string;
9811
- deliveryMethod: "COURIER" | "DIRECT" | "QUICK" | "NOTHING";
10794
+ deliveryMethod: "DIRECT" | "COURIER" | "QUICK" | "NOTHING";
9812
10795
  carrierCode: string | null;
9813
10796
  carrierName: string | null;
9814
10797
  trackingNumber: string | null;
@@ -9829,6 +10812,370 @@ export declare function createStoreClient(options: StoreClientOptions): {
9829
10812
  stage: string | null;
9830
10813
  }[] | undefined;
9831
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>;
9832
11179
  };
9833
11180
  carriers: {
9834
11181
  list: () => Promise<{
@@ -10325,7 +11672,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10325
11672
  version: string | null;
10326
11673
  documentUrl: string | null;
10327
11674
  action: "WITHDRAWN" | "AGREED";
10328
- source: "SELLER" | "SIGNUP" | "SOCIAL_SIGNUP" | "DELEGATED" | "RECONSENT" | "MEMBER_UPDATE";
11675
+ source: "SIGNUP" | "SELLER" | "SOCIAL_SIGNUP" | "DELEGATED" | "RECONSENT" | "MEMBER_UPDATE";
10329
11676
  occurredAt: string;
10330
11677
  }[];
10331
11678
  }>;
@@ -10348,6 +11695,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10348
11695
  value: number;
10349
11696
  maxDiscountAmount: number | null;
10350
11697
  };
11698
+ source?: string | undefined;
10351
11699
  }[]>;
10352
11700
  withdraw: (customerId: string, body: WithdrawCustomerRequest) => Promise<void>;
10353
11701
  };
@@ -10669,6 +12017,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10669
12017
  usedOrderId: string | null;
10670
12018
  issuedAt: string;
10671
12019
  revokedAt: string | null;
12020
+ source?: string | undefined;
10672
12021
  }[];
10673
12022
  }>;
10674
12023
  redemptions: (couponId: string, params?: PageParams & {
@@ -10716,6 +12065,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10716
12065
  usedOrderId: string | null;
10717
12066
  issuedAt: string;
10718
12067
  revokedAt: string | null;
12068
+ source?: string | undefined;
10719
12069
  }>;
10720
12070
  };
10721
12071
  customerInquiries: {
@@ -11909,7 +13259,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11909
13259
  list: () => Promise<{
11910
13260
  webhookId: string;
11911
13261
  url: string;
11912
- 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")[];
11913
13263
  status: "SUSPENDED" | "ACTIVE";
11914
13264
  secretPrefix: string;
11915
13265
  suspendedAt: string | null;
@@ -11919,7 +13269,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11919
13269
  create: (body: WebhookRequest) => Promise<{
11920
13270
  webhookId: string;
11921
13271
  url: string;
11922
- 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")[];
11923
13273
  status: "SUSPENDED" | "ACTIVE";
11924
13274
  secretPrefix: string;
11925
13275
  suspendedAt: string | null;
@@ -11929,7 +13279,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11929
13279
  get: (webhookId: string) => Promise<{
11930
13280
  webhookId: string;
11931
13281
  url: string;
11932
- 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")[];
11933
13283
  status: "SUSPENDED" | "ACTIVE";
11934
13284
  secretPrefix: string;
11935
13285
  suspendedAt: string | null;
@@ -11939,7 +13289,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11939
13289
  update: (webhookId: string, body: WebhookRequest) => Promise<{
11940
13290
  webhookId: string;
11941
13291
  url: string;
11942
- 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")[];
11943
13293
  status: "SUSPENDED" | "ACTIVE";
11944
13294
  secretPrefix: string;
11945
13295
  suspendedAt: string | null;
@@ -11954,7 +13304,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11954
13304
  resume: (webhookId: string) => Promise<{
11955
13305
  webhookId: string;
11956
13306
  url: string;
11957
- 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")[];
11958
13308
  status: "SUSPENDED" | "ACTIVE";
11959
13309
  secretPrefix: string;
11960
13310
  suspendedAt: string | null;
@@ -11964,7 +13314,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11964
13314
  listDeliveries: (webhookId: string, params?: WebhookDeliveryListParams) => Promise<{
11965
13315
  deliveryId: string;
11966
13316
  eventId: string;
11967
- 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";
11968
13318
  url: string;
11969
13319
  status: "PENDING" | "PENDING_RETRY" | "SUCCESS" | "FAILED";
11970
13320
  responseStatusCode: number | null;
@@ -11991,7 +13341,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
11991
13341
  getDelivery: (webhookId: string, deliveryId: string) => Promise<{
11992
13342
  deliveryId: string;
11993
13343
  eventId: string;
11994
- 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";
11995
13345
  url: string;
11996
13346
  status: "PENDING" | "PENDING_RETRY" | "SUCCESS" | "FAILED";
11997
13347
  responseStatusCode: number | null;
@@ -12026,7 +13376,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
12026
13376
  redeliver: (webhookId: string, deliveryId: string) => Promise<{
12027
13377
  deliveryId: string;
12028
13378
  eventId: string;
12029
- 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";
12030
13380
  url: string;
12031
13381
  status: "PENDING" | "PENDING_RETRY" | "SUCCESS" | "FAILED";
12032
13382
  responseStatusCode: number | null;
@@ -12404,6 +13754,40 @@ export declare function createStoreClient(options: StoreClientOptions): {
12404
13754
  remove: (addressId: string) => Promise<void>;
12405
13755
  setDefault: (addressId: string) => Promise<void>;
12406
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
+ };
12407
13791
  /**
12408
13792
  * 스토어프론트 호스팅 (이슈 #53) — 조회 `storefront:r`, 쓰기 `storefront:rw`(OWNER·ADMIN).
12409
13793
  * 쓰기 응답은 바뀐 사이트다. Cloudflare 반영은 커밋 뒤라 `provisioning.status`가 잠시 `PENDING`일 수 있다.
@@ -14426,10 +15810,13 @@ export declare const STORE_SCOPE_RESOURCES: {
14426
15810
  readonly audit: readonly ["r"];
14427
15811
  readonly promotion: readonly ["r", "rw"];
14428
15812
  readonly storefront: readonly ["r", "rw"];
15813
+ readonly flow: readonly ["r", "rw"];
14429
15814
  };
14430
15815
  export type StoreScopeResource = keyof typeof STORE_SCOPE_RESOURCES;
14431
15816
  export declare const storeScopeResourceSchema: z.ZodEnum<{
14432
15817
  category: "category";
15818
+ member: "member";
15819
+ flow: "flow";
14433
15820
  analytics: "analytics";
14434
15821
  product: "product";
14435
15822
  order: "order";
@@ -14439,7 +15826,6 @@ export declare const storeScopeResourceSchema: z.ZodEnum<{
14439
15826
  settlement: "settlement";
14440
15827
  webhook: "webhook";
14441
15828
  store: "store";
14442
- member: "member";
14443
15829
  customer: "customer";
14444
15830
  audit: "audit";
14445
15831
  promotion: "promotion";
@@ -14452,9 +15838,9 @@ export declare function isStoreScope(scope: string): boolean;
14452
15838
  * 계정 토큰으로 상점을 호출할 때의 스코프는 그 상점에서의 역할로 이 표에서 결정된다.
14453
15839
  */
14454
15840
  export declare const STORE_ROLE_SCOPES: {
14455
- 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"];
14456
- 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"];
14457
- 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"];
14458
15844
  };
14459
15845
  //#endregion
14460
15846
  //#region src/schemas/shipping-policy.d.ts
@@ -14592,6 +15978,8 @@ export interface DeliveryFeeLine {
14592
15978
  * 유형을 바꿔도 결제 시작의 견적과 주문상품 스냅샷이 같은 유형을 보게 한다. 생략하면 상품 값을 쓴다.
14593
15979
  */
14594
15980
  fulfillmentType?: FulfillmentType | null;
15981
+ /** 이 줄의 이행 방식(이슈 #115) — 배송지가 없는 방식(방문 수령)은 묶음을 만들지 않는다. 생략하면 유형 규칙만 본다 */
15982
+ fulfillmentMethod?: string | null;
14595
15983
  }
14596
15984
  /**
14597
15985
  * 기본 배송비를 면제한 근거 — 면제하지 않았으면 null이다.
@@ -15042,8 +16430,24 @@ export declare const orderWebhookEventDataSchema: z.ZodObject<{
15042
16430
  bundleKey: z.ZodNullable<z.ZodString>;
15043
16431
  returnAddressId: z.ZodNullable<z.ZodString>;
15044
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>>;
15045
16441
  }, z.core.$strip>, z.ZodObject<{
15046
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>>;
15047
16451
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15048
16452
  type: z.ZodString;
15049
16453
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15061,6 +16465,8 @@ export declare const orderWebhookEventDataSchema: z.ZodObject<{
15061
16465
  customInputs: z.ZodArray<z.ZodObject<{
15062
16466
  label: z.ZodString;
15063
16467
  value: z.ZodString;
16468
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16469
+ type: z.ZodOptional<z.ZodString>;
15064
16470
  }, z.core.$strip>>;
15065
16471
  }, z.core.$strip>>>;
15066
16472
  }, z.core.$strip>;
@@ -15089,8 +16495,24 @@ export declare const orderFulfilledWebhookEventDataSchema: z.ZodObject<{
15089
16495
  bundleKey: z.ZodNullable<z.ZodString>;
15090
16496
  returnAddressId: z.ZodNullable<z.ZodString>;
15091
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>>;
15092
16506
  }, z.core.$strip>, z.ZodObject<{
15093
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>>;
15094
16516
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15095
16517
  type: z.ZodString;
15096
16518
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15225,8 +16647,24 @@ export declare const orderWebhookEventSchema: z.ZodObject<{
15225
16647
  bundleKey: z.ZodNullable<z.ZodString>;
15226
16648
  returnAddressId: z.ZodNullable<z.ZodString>;
15227
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>>;
15228
16658
  }, z.core.$strip>, z.ZodObject<{
15229
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>>;
15230
16668
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15231
16669
  type: z.ZodString;
15232
16670
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15244,6 +16682,8 @@ export declare const orderWebhookEventSchema: z.ZodObject<{
15244
16682
  customInputs: z.ZodArray<z.ZodObject<{
15245
16683
  label: z.ZodString;
15246
16684
  value: z.ZodString;
16685
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16686
+ type: z.ZodOptional<z.ZodString>;
15247
16687
  }, z.core.$strip>>;
15248
16688
  }, z.core.$strip>>>;
15249
16689
  }, z.core.$strip>;
@@ -15274,8 +16714,24 @@ export declare const orderFulfilledWebhookEventSchema: z.ZodObject<{
15274
16714
  bundleKey: z.ZodNullable<z.ZodString>;
15275
16715
  returnAddressId: z.ZodNullable<z.ZodString>;
15276
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>>;
15277
16725
  }, z.core.$strip>, z.ZodObject<{
15278
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>>;
15279
16735
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15280
16736
  type: z.ZodString;
15281
16737
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15412,6 +16868,33 @@ export declare const productOutOfStockWebhookEventSchema: z.ZodObject<{
15412
16868
  storeId: z.ZodString;
15413
16869
  sequence: z.ZodOptional<z.ZodNumber>;
15414
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>;
15415
16898
  /** 웹훅 요청 본문. `type`으로 판별하며 `data` 형태가 타입별로 다르다 */
15416
16899
  export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15417
16900
  type: z.ZodEnum<{
@@ -15445,8 +16928,24 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15445
16928
  bundleKey: z.ZodNullable<z.ZodString>;
15446
16929
  returnAddressId: z.ZodNullable<z.ZodString>;
15447
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>>;
15448
16939
  }, z.core.$strip>, z.ZodObject<{
15449
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>>;
15450
16949
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15451
16950
  type: z.ZodString;
15452
16951
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15464,6 +16963,8 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15464
16963
  customInputs: z.ZodArray<z.ZodObject<{
15465
16964
  label: z.ZodString;
15466
16965
  value: z.ZodString;
16966
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16967
+ type: z.ZodOptional<z.ZodString>;
15467
16968
  }, z.core.$strip>>;
15468
16969
  }, z.core.$strip>>>;
15469
16970
  }, z.core.$strip>;
@@ -15493,8 +16994,24 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15493
16994
  bundleKey: z.ZodNullable<z.ZodString>;
15494
16995
  returnAddressId: z.ZodNullable<z.ZodString>;
15495
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>>;
15496
17005
  }, z.core.$strip>, z.ZodObject<{
15497
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>>;
15498
17015
  }, z.core.$strip>], "type">, z.ZodPipe<z.ZodObject<{
15499
17016
  type: z.ZodString;
15500
17017
  }, z.core.$loose>, z.ZodTransform<UnknownFulfillment, {
@@ -15625,6 +17142,20 @@ export declare const webhookEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
15625
17142
  createdAt: z.ZodString;
15626
17143
  storeId: z.ZodString;
15627
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>;
15628
17159
  }, z.core.$strip>], "type">;
15629
17160
  export type WebhookEvent = z.infer<typeof webhookEventSchema>;
15630
17161
  export type WebhookEventType = WebhookEvent["type"];
@@ -15634,5 +17165,33 @@ export type WebhookEventOf<T extends WebhookEventType> = WebhookEvent extends (i
15634
17165
  } ? T extends U ? Omit<E, "type"> & {
15635
17166
  type: T;
15636
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;
15637
17196
  //#endregion
15638
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 };