@sayren/storefront-sdk 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/index.mjs +1 -1
- package/dist/{checkout-Dsv9C9Zp.mjs → checkout-C25liqdW.mjs} +113 -98
- package/dist/{client-ZPNEEeRT.mjs → client-CBAgQuTc.mjs} +15 -72
- package/dist/{index-D5uvtiOl.d.mts → index-BsHuMzBD.d.mts} +577 -698
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +3 -3
- package/dist/payments/index.d.mts +1 -3
- package/dist/payments/index.mjs +1 -2
- package/package.json +1 -1
- package/src/client.ts +1 -57
- package/src/index.ts +1 -0
- package/src/payments/index.ts +0 -5
- package/src/schemas/cart.ts +9 -0
- package/src/schemas/catalog.ts +15 -0
- package/src/schemas/checkout.ts +20 -22
- package/src/schemas/coupon.ts +19 -2
- package/src/schemas/fulfillment.ts +14 -76
- package/src/schemas/order.ts +7 -86
- package/src/schemas/product-options.ts +128 -0
package/dist/auth/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pt as ApiError, t as createStorefrontClient } from "../client-CBAgQuTc.mjs";
|
|
2
2
|
//#region src/auth/index.ts
|
|
3
3
|
/** 소셜 로그인 실패 — 구매자가 취소했거나(`access_denied`) state가 맞지 않는다 */
|
|
4
4
|
var IdpCallbackError = class extends Error {
|
|
@@ -2,20 +2,14 @@ import { z } from "zod";
|
|
|
2
2
|
//#region src/schemas/fulfillment.ts
|
|
3
3
|
/**
|
|
4
4
|
* 구매자용 상품 이행 (이슈 #57) — 관리 API의 상품 이행에서 구매자에게 필요한 것만 싣는다. 유형, 배송 필요 여부, 배송 안내(배송비·
|
|
5
|
-
* 무료 기준·반품·교환 배송비)
|
|
6
|
-
* 싣지 않는다.
|
|
5
|
+
* 무료 기준·반품·교환 배송비)다. 셀러 내부 값(출고지·반품지 id)은 싣지 않는다.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
7
|
+
* 유형은 `SHIPPING`(배송 상품)과 `MANUAL`(배송 없는 상품, 판매자가 제공 처리) 둘이다(이슈 #48 범위 축소).
|
|
8
|
+
* 유형 이름은 응답에서 문자열이고, 모르는 유형(서버가 나중에 더한 유형)은 `{ type: "OTHER", rawType,
|
|
9
9
|
* requiresShipping }`로 읽는다. `requiresShipping`은 판별 값에서 파생되지만 **모든 가지에 싣는다** — 모르는 유형에서도 주문서가
|
|
10
10
|
* 배송지를 받을지 정할 수 있어야 한다.
|
|
11
11
|
*/
|
|
12
|
-
const KNOWN_TYPES = [
|
|
13
|
-
"SHIPPING",
|
|
14
|
-
"DOWNLOAD",
|
|
15
|
-
"CODE",
|
|
16
|
-
"SERVICE",
|
|
17
|
-
"PICKUP"
|
|
18
|
-
];
|
|
12
|
+
const KNOWN_TYPES = ["SHIPPING", "MANUAL"];
|
|
19
13
|
/** 알려진 유형만 판별 유니온으로 검사하고 모르는 유형은 `OTHER`로 읽는다. 알려진 유형의 모양이 틀리면 파싱 오류다 */
|
|
20
14
|
function openUnion(known) {
|
|
21
15
|
return z.union([known, z.looseObject({
|
|
@@ -28,99 +22,115 @@ function openUnion(known) {
|
|
|
28
22
|
}))]);
|
|
29
23
|
}
|
|
30
24
|
const requiresShippingDescription = "택배 배송이 필요한가. false면 배송비가 없고 주문서가 배송지를 받지 않는다";
|
|
31
|
-
const withdrawalRestrictedField = z.boolean().describe("청약철회 제한 대상인가. true면 주문서가 제한 고지 동의를 받고, 첫 다운로드·열람 뒤 단순 변심 취소·반품을 받지 않는다");
|
|
32
|
-
/** 방문 수령 장소 표시값 — 주소 id는 싣지 않는다 */
|
|
33
|
-
const pickupLocationSchema = z.object({
|
|
34
|
-
name: z.string().describe("수령 장소 이름"),
|
|
35
|
-
zipCode: z.string(),
|
|
36
|
-
address1: z.string(),
|
|
37
|
-
address2: z.string().nullable(),
|
|
38
|
-
phone: z.string().describe("수령 장소 연락처")
|
|
39
|
-
});
|
|
40
25
|
/** 상품 카드(목록·찜)의 이행 — 유형과 배송 필요 여부만. 배송비·환불 정책은 상세에서 본다 */
|
|
41
26
|
const productCardFulfillmentSchema = z.object({
|
|
42
27
|
type: z.string().describe("상품 유형. 값이 추가될 수 있어 문자열로 받는다"),
|
|
43
28
|
requiresShipping: z.boolean().describe(requiresShippingDescription)
|
|
44
29
|
});
|
|
45
30
|
/** 상품 상세의 이행 */
|
|
46
|
-
const productFulfillmentViewSchema = openUnion(z.discriminatedUnion("type", [
|
|
47
|
-
z.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
exchangeDeliveryFee: z.number().int().describe("단순 변심 교환 배송비(유효 환불 정책). 원 단위")
|
|
57
|
-
})
|
|
58
|
-
}),
|
|
59
|
-
z.object({
|
|
60
|
-
type: z.literal("DOWNLOAD"),
|
|
61
|
-
requiresShipping: z.literal(false),
|
|
62
|
-
download: z.object({
|
|
63
|
-
limit: z.number().int().describe("다운로드 횟수 한도(수량 1개당)"),
|
|
64
|
-
days: z.number().int().describe("다운로드 기간(제공일부터 일수)"),
|
|
65
|
-
withdrawalRestricted: withdrawalRestrictedField
|
|
66
|
-
})
|
|
67
|
-
}),
|
|
68
|
-
z.object({
|
|
69
|
-
type: z.literal("CODE"),
|
|
70
|
-
requiresShipping: z.literal(false),
|
|
71
|
-
code: z.object({ withdrawalRestricted: withdrawalRestrictedField })
|
|
72
|
-
}),
|
|
73
|
-
z.object({
|
|
74
|
-
type: z.literal("SERVICE"),
|
|
75
|
-
requiresShipping: z.literal(false)
|
|
76
|
-
}),
|
|
77
|
-
z.object({
|
|
78
|
-
type: z.literal("PICKUP"),
|
|
79
|
-
requiresShipping: z.literal(false),
|
|
80
|
-
pickup: z.object({ location: pickupLocationSchema.nullable().describe("방문 수령 장소. 수령지가 지워졌으면 null이다(판매자에게 문의)") })
|
|
31
|
+
const productFulfillmentViewSchema = openUnion(z.discriminatedUnion("type", [z.object({
|
|
32
|
+
type: z.literal("SHIPPING"),
|
|
33
|
+
requiresShipping: z.literal(true),
|
|
34
|
+
shipping: z.object({
|
|
35
|
+
deliveryType: z.string().describe("배송비 유형. 현재 값은 `FREE`·`PAID`·`CONDITIONAL_FREE`"),
|
|
36
|
+
deliveryFee: z.number().int().describe("기본 배송비. 원 단위. 묶음·지역 추가 배송비는 장바구니·주문서 견적이 정한다"),
|
|
37
|
+
conditionalFreeAmount: z.number().int().nullable().describe("조건부 무료 기준 금액. 조건부 무료가 아니면 null"),
|
|
38
|
+
estimatedDays: z.string().describe("예상 배송 기간 안내 문구"),
|
|
39
|
+
returnDeliveryFee: z.number().int().describe("단순 변심 반품 배송비(유효 환불 정책). 원 단위"),
|
|
40
|
+
exchangeDeliveryFee: z.number().int().describe("단순 변심 교환 배송비(유효 환불 정책). 원 단위")
|
|
81
41
|
})
|
|
82
|
-
|
|
42
|
+
}), z.object({
|
|
43
|
+
type: z.literal("MANUAL"),
|
|
44
|
+
requiresShipping: z.literal(false)
|
|
45
|
+
})])).describe("상품 이행. `type`이 유형이고 같은 이름의 키가 유형별 안내다. 값이 추가될 수 있어 SDK는 모르는 유형을 `OTHER`로 읽는다");
|
|
83
46
|
/** 장바구니 줄·주문서 줄의 이행 — 주문서 줄은 주문서 시점 스냅샷이다 */
|
|
84
47
|
const lineFulfillmentSchema = z.object({
|
|
85
48
|
type: z.string().describe("상품 유형. 값이 추가될 수 있어 문자열로 받는다"),
|
|
86
49
|
requiresShipping: z.boolean().describe(requiresShippingDescription),
|
|
87
|
-
withdrawalRestricted:
|
|
50
|
+
withdrawalRestricted: z.boolean().optional().describe("**Deprecated** — 항상 false다. 청약철회 제한 기능을 없앴고(이슈 #48) storefront-sdk 0.15 이하 호환으로만 싣는다. 게시된 스토어프론트가 0.16 이상으로 넘어간 뒤 다음 릴리스에서 뺀다")
|
|
88
51
|
});
|
|
89
52
|
/**
|
|
90
|
-
* 내 주문 주문상품의 주문 시점 이행 스냅샷. 상품을 나중에 고쳐도 바뀌지 않는다.
|
|
53
|
+
* 내 주문 주문상품의 주문 시점 이행 스냅샷. 상품을 나중에 고쳐도 바뀌지 않는다. 제공 기록(제공 시각·판매자 안내)은
|
|
91
54
|
* 주문상품의 `fulfillment`다.
|
|
92
55
|
*/
|
|
93
|
-
const myOrderItemFulfillmentSnapshotSchema = openUnion(z.discriminatedUnion("type", [
|
|
94
|
-
z.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
z.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
z.object({
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
56
|
+
const myOrderItemFulfillmentSnapshotSchema = openUnion(z.discriminatedUnion("type", [z.object({
|
|
57
|
+
type: z.literal("SHIPPING"),
|
|
58
|
+
requiresShipping: z.literal(true)
|
|
59
|
+
}), z.object({
|
|
60
|
+
type: z.literal("MANUAL"),
|
|
61
|
+
requiresShipping: z.literal(false)
|
|
62
|
+
})])).describe("주문 시점 이행 스냅샷. 값이 추가될 수 있어 SDK는 모르는 유형을 `OTHER`로 읽는다");
|
|
63
|
+
//#endregion
|
|
64
|
+
//#region src/schemas/product-options.ts
|
|
65
|
+
/**
|
|
66
|
+
* 추가 선택·직접 입력 (이슈 #59) — 상품 상세의 옵션 표시, 장바구니 담기·바로 구매 요청, 줄 스냅샷의 공통 모양.
|
|
67
|
+
*
|
|
68
|
+
* 추가 선택은 재고가 없는 옵션이다. 구매자가 조합(옵션이 없으면 상품)을 고른 뒤 옵션명마다 값 하나를 더 고르고, 값의 추가금이
|
|
69
|
+
* 단가에 더해진다. 직접 입력은 구매자가 글자를 적는 항목(각인 문구 등)이다. 추가 선택 값이나 직접 입력값이 다르면 장바구니에서 다른 줄이다.
|
|
70
|
+
*/
|
|
71
|
+
const addonGroupViewSchema = z.object({
|
|
72
|
+
groupId: z.string(),
|
|
73
|
+
name: z.string(),
|
|
74
|
+
required: z.boolean().describe("꼭 골라야 하는가. false면 고르지 않아도 된다(「선택 안 함」)"),
|
|
75
|
+
values: z.array(z.object({
|
|
76
|
+
valueId: z.string(),
|
|
77
|
+
name: z.string(),
|
|
78
|
+
additionalPrice: z.number().int().describe("이 값을 고르면 단가에 더하는 금액(원, 0 이상)")
|
|
79
|
+
})).describe("고를 수 있는 값(셀러가 끈 값은 빠진다)")
|
|
80
|
+
});
|
|
81
|
+
const customInputViewSchema = z.object({
|
|
82
|
+
inputId: z.string(),
|
|
83
|
+
label: z.string().describe("항목명"),
|
|
84
|
+
placeholder: z.string().nullable().describe("입력 안내. 없으면 null"),
|
|
85
|
+
maxLength: z.number().int().describe("최대 글자 수"),
|
|
86
|
+
required: z.boolean()
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* 직접 입력값 정규화 — NFC로 모으고, 제어 문자(C0·C1·줄바꿈·줄·문단 구분자)는 공백으로, 제로폭·양방향 제어 문자는 지운 뒤
|
|
90
|
+
* 앞뒤 공백을 지운다. 서버가 저장하는 값이 이것이다. 빈 문자열이면 입력하지 않은 것으로 본다.
|
|
91
|
+
* (양방향 제어 문자를 두면 셀러 주문 화면의 각인 문구가 뒤집혀 보이게 할 수 있다.)
|
|
92
|
+
*/
|
|
93
|
+
function normalizeCustomInputValue(value) {
|
|
94
|
+
return value.normalize("NFC").replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029]/g, " ").replace(/[\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u2069\ufeff]/g, "").trim();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 직접 입력값의 글자 수 — 정규화한 값의 **코드 포인트 수**다(이모지 하나가 1자). 서버의 최대 글자 수 판정(`CUSTOM_INPUT_TOO_LONG`)과
|
|
98
|
+
* 스토어프론트·콘솔의 글자 수 표시가 이 함수 하나를 쓴다. `String.length`(UTF-16)로 세면 이모지가 2자로 세어 판정이 갈린다.
|
|
99
|
+
*/
|
|
100
|
+
function customInputLength(value) {
|
|
101
|
+
return [...normalizeCustomInputValue(value)].length;
|
|
123
102
|
}
|
|
103
|
+
/** 담기·바로 구매 요청의 직접 입력값 한 칸. 앞뒤 공백을 지우고, 빈 값은 입력하지 않은 것으로 본다 */
|
|
104
|
+
const customInputEntrySchema = z.object({
|
|
105
|
+
inputId: z.string(),
|
|
106
|
+
value: z.string().max(1e3)
|
|
107
|
+
});
|
|
108
|
+
/** 고른 추가 선택 한 칸 — 옵션명(`groupId`)과 그 옵션명의 값(`valueId`) */
|
|
109
|
+
const addonSelectionSchema = z.object({
|
|
110
|
+
groupId: z.string(),
|
|
111
|
+
valueId: z.string()
|
|
112
|
+
});
|
|
113
|
+
/** 요청의 추가 선택·직접 입력 필드 — 담기·장바구니 수정·바로 구매가 같은 이름을 쓴다 */
|
|
114
|
+
const lineSelectionRequestShape = {
|
|
115
|
+
addons: z.array(addonSelectionSchema).max(20).optional().describe("고른 추가 선택(옵션명마다 하나, 고르지 않은 옵션명은 빼고 보낸다). 필수 옵션명을 빼면 400 `ADDON_OPTION_REQUIRED`, 없거나 꺼진 값이거나 한 옵션명에서 둘을 고르면 400 `ADDON_OPTION_NOT_FOUND`"),
|
|
116
|
+
customInputs: z.array(customInputEntrySchema).max(20).optional().describe("직접 입력값. 필수 항목을 비우면 400 `CUSTOM_INPUT_REQUIRED`, 최대 글자 수를 넘으면 400 `CUSTOM_INPUT_TOO_LONG`, 없는 항목이면 400 `CUSTOM_INPUT_NOT_FOUND`")
|
|
117
|
+
};
|
|
118
|
+
/** 줄의 옵션 선택 스냅샷 한 칸 — 조합 옵션은 옵션명마다 한 칸이고 추가금이 0이다(조합 추가금은 단가에 들어 있다) */
|
|
119
|
+
const optionSelectionViewSchema = z.object({
|
|
120
|
+
kind: z.string().describe("옵션명 방식. 현재 값은 `combination`·`addon`이고 값이 추가될 수 있어 문자열로 받는다"),
|
|
121
|
+
groupName: z.string(),
|
|
122
|
+
valueName: z.string(),
|
|
123
|
+
additionalPrice: z.number().int()
|
|
124
|
+
});
|
|
125
|
+
const customInputValueViewSchema = z.object({
|
|
126
|
+
label: z.string().describe("항목명"),
|
|
127
|
+
value: z.string().describe("구매자가 적은 값")
|
|
128
|
+
});
|
|
129
|
+
/** 응답 줄의 표시 필드 — 장바구니·주문서·주문상품이 같은 이름을 쓴다 */
|
|
130
|
+
const lineSelectionResponseShape = {
|
|
131
|
+
optionSelections: z.array(optionSelectionViewSchema).optional().default([]).describe("옵션 선택(조합 옵션 + 추가 선택). 옵션이 없으면 빈 배열. 서버는 항상 싣는다"),
|
|
132
|
+
customInputs: z.array(customInputValueViewSchema).optional().default([]).describe("직접 입력값(항목명과 값). 없으면 빈 배열. 서버는 항상 싣는다")
|
|
133
|
+
};
|
|
124
134
|
//#endregion
|
|
125
135
|
//#region src/schemas/coupon.ts
|
|
126
136
|
/**
|
|
@@ -136,7 +146,8 @@ function withdrawalRestrictedOfView(fulfillment) {
|
|
|
136
146
|
const couponApplicationSchema = z.object({
|
|
137
147
|
issueId: z.string().min(1).optional().describe("내 쿠폰(발급 쿠폰) id — `GET /me/coupons`의 `issueId`"),
|
|
138
148
|
code: z.string().trim().min(1).max(30).optional().describe("쿠폰 코드. 대소문자를 구분하지 않는다"),
|
|
139
|
-
optionId: z.string().optional().describe("상품 쿠폰을 걸 주문서 항목의 `optionId`. 생략하면 할인이 가장 큰 항목에 건다. 주문 쿠폰에는 쓰지
|
|
149
|
+
optionId: z.string().optional().describe("상품 쿠폰을 걸 주문서 항목의 `optionId`. 생략하면 할인이 가장 큰 항목에 건다. 주문 쿠폰에는 쓰지 않는다. 같은 `optionId`의 줄이 여럿이면 적용하지 못한다(`LINE_AMBIGUOUS`) — 그때는 `lineId`를 쓴다"),
|
|
150
|
+
lineId: z.string().optional().describe("상품 쿠폰을 걸 주문서 줄의 `lineId`(이슈 #59). 주면 `optionId`보다 우선한다. 주문 쿠폰에는 쓰지 않는다")
|
|
140
151
|
}).refine((value) => (value.issueId ? 1 : 0) + (value.code ? 1 : 0) === 1, { message: "issueId와 code 중 하나만 보내 주십시오" });
|
|
141
152
|
/** 한 번에 적용할 수 있는 쿠폰 수 */
|
|
142
153
|
const MAX_COUPONS_PER_CHECKOUT = 5;
|
|
@@ -157,8 +168,9 @@ const couponResultSchema = z.object({
|
|
|
157
168
|
benefit: couponBenefitViewSchema,
|
|
158
169
|
applied: z.boolean(),
|
|
159
170
|
discountAmount: z.number().int().describe("이 쿠폰의 할인액. 적용하지 못했으면 0"),
|
|
160
|
-
rejectReason: z.string().nullable().describe("적용하지 못한 사유. `MIN_ORDER_AMOUNT`(최소 주문 금액 미달)·`NO_ELIGIBLE_ITEMS`(대상 상품 없음)·`NOT_STARTED`·`EXPIRED`·`MEMBER_ONLY`(회원 전용)·`STACK_LIMIT`(같은 종류 쿠폰이 이미 적용됨)·`DUPLICATE_COUPON`·`LINE_NOT_ELIGIBLE`·`NO_DISCOUNT`·`IN_USE`(다른 결제에서 쓰는 중)·`LIMIT_REACHED`(1인 사용 한도)·`EXHAUSTED`(총 사용 한도)·`INACTIVE`(중지된 쿠폰). 값이 늘 수 있다"),
|
|
161
|
-
optionId: z.string().nullable().describe("상품 쿠폰이 걸린 주문서 항목의 `optionId`. 그 밖은 null")
|
|
171
|
+
rejectReason: z.string().nullable().describe("적용하지 못한 사유. `MIN_ORDER_AMOUNT`(최소 주문 금액 미달)·`NO_ELIGIBLE_ITEMS`(대상 상품 없음)·`NOT_STARTED`·`EXPIRED`·`MEMBER_ONLY`(회원 전용)·`STACK_LIMIT`(같은 종류 쿠폰이 이미 적용됨)·`DUPLICATE_COUPON`·`LINE_NOT_ELIGIBLE`·`NO_DISCOUNT`·`LINE_AMBIGUOUS`(같은 `optionId`의 줄이 여럿, `lineId`로 지목한다)·`IN_USE`(다른 결제에서 쓰는 중)·`LIMIT_REACHED`(1인 사용 한도)·`EXHAUSTED`(총 사용 한도)·`INACTIVE`(중지된 쿠폰). 값이 늘 수 있다"),
|
|
172
|
+
optionId: z.string().nullable().describe("상품 쿠폰이 걸린 주문서 항목의 `optionId`. 그 밖은 null"),
|
|
173
|
+
lineId: z.string().nullable().optional().default(null).describe("상품 쿠폰이 걸린 주문서 줄의 `lineId`(이슈 #59). 그 밖은 null. 서버는 항상 싣는다")
|
|
162
174
|
});
|
|
163
175
|
/** 쿠폰을 반영한 금액 — 결제 금액 = productAmount − couponDiscountAmount + deliveryFee − deliveryDiscountAmount */
|
|
164
176
|
const pricingAmountsSchema = z.object({
|
|
@@ -180,6 +192,7 @@ const checkoutPricingSchema = z.object({
|
|
|
180
192
|
coupons: z.array(couponResultSchema).describe("요청한 쿠폰마다 한 줄, 요청 순서대로"),
|
|
181
193
|
items: z.array(z.object({
|
|
182
194
|
optionId: z.string().nullable(),
|
|
195
|
+
lineId: z.string().optional().describe("주문서 줄의 `lineId`(이슈 #59). 서버는 항상 싣는다"),
|
|
183
196
|
couponDiscountAmount: z.number().int().describe("이 항목에 들어간 쿠폰 할인")
|
|
184
197
|
})).describe("주문서 항목별 쿠폰 할인 — 주문서 `items`와 같은 순서"),
|
|
185
198
|
payable: z.boolean().describe("이 금액으로 결제를 시작할 수 있는가 — 적용하지 못한 쿠폰이 있거나 결제 금액이 100원 미만이면 false")
|
|
@@ -225,7 +238,8 @@ const createCheckoutRequestSchema = z.object({
|
|
|
225
238
|
directItem: z.object({
|
|
226
239
|
productId: z.string(),
|
|
227
240
|
optionId: z.string().optional(),
|
|
228
|
-
quantity: z.number().int().min(1)
|
|
241
|
+
quantity: z.number().int().min(1),
|
|
242
|
+
...lineSelectionRequestShape
|
|
229
243
|
}).optional()
|
|
230
244
|
}).refine((value) => value.cartItemIds ? !value.directItem : !!value.directItem, { message: "cartItemIds와 directItem 중 하나만 전달해야 합니다" });
|
|
231
245
|
/** 지역 추가 배송비 구분 — 우편번호로 판정한다 */
|
|
@@ -256,13 +270,15 @@ const checkoutDeliverySchema = z.object({
|
|
|
256
270
|
const checkoutSessionSchema = z.object({
|
|
257
271
|
checkoutId: z.string(),
|
|
258
272
|
items: z.array(z.object({
|
|
273
|
+
lineId: z.string().optional().describe("주문서 줄 id(이슈 #59). 같은 `optionId`가 추가 선택·직접 입력이 달라 여러 줄에 나올 수 있어, 상품 쿠폰을 걸 줄은 이 값으로 지목한다. 서버는 항상 싣는다"),
|
|
259
274
|
productId: z.string(),
|
|
260
275
|
productName: z.string(),
|
|
261
276
|
/** variantId. 옵션 없는 상품은 default variant id */
|
|
262
277
|
optionId: z.string().nullable(),
|
|
263
278
|
optionName: z.string().nullable(),
|
|
279
|
+
...lineSelectionResponseShape,
|
|
264
280
|
quantity: z.number().int(),
|
|
265
|
-
unitPrice: z.number().int(),
|
|
281
|
+
unitPrice: z.number().int().describe("단가 — 할인 반영 판매가 + 조합 추가금 + 추가 선택 추가금"),
|
|
266
282
|
totalPrice: z.number().int(),
|
|
267
283
|
fulfillment: lineFulfillmentSchema.describe("주문서 시점 상품 이행")
|
|
268
284
|
})),
|
|
@@ -276,9 +292,9 @@ const checkoutSessionSchema = z.object({
|
|
|
276
292
|
delivery: checkoutDeliverySchema.describe("배송비 내역. 배송지를 입력하면 금액이 바뀔 수 있다 — 최종 금액은 결제 시작 응답의 `amounts`다"),
|
|
277
293
|
requiresShipping: z.boolean().describe("택배 배송이 필요한 상품이 있는가. false면 배송지를 받지 않는다 — 결제 시작에 `shippingAddress`를 보내지 않아도 된다"),
|
|
278
294
|
withdrawal: z.object({
|
|
279
|
-
required: z.boolean()
|
|
280
|
-
notice: z.string().nullable()
|
|
281
|
-
}).describe("청약철회 제한
|
|
295
|
+
required: z.boolean(),
|
|
296
|
+
notice: z.string().nullable()
|
|
297
|
+
}).optional().describe("**Deprecated** — 항상 `{ required: false, notice: null }`이다. 청약철회 제한 고지를 없앴고(이슈 #48) storefront-sdk 0.15 이하 호환으로만 싣는다. 게시된 스토어프론트가 0.16 이상으로 넘어간 뒤 다음 릴리스에서 뺀다"),
|
|
282
298
|
expiresAt: z.string(),
|
|
283
299
|
paymentOptions: z.lazy(() => paymentOptionListSchema).describe("이 주문서에서 고를 수 있는 결제 옵션, PG 우선순위순. 셀러가 켠 PG·결제수단·간편결제만 담긴다. 비어 있으면 지금 결제할 수 없다"),
|
|
284
300
|
testPayment: z.boolean().describe("지금 결제하면 테스트 결제(샌드박스)인가. true면 실제로 돈이 나가지 않습니다 — 주문서에 테스트 결제 안내를 표시합니다. 결제 요청 시점에 스토어 결제 설정으로 다시 정해지니 최종 값은 결제 요청 응답의 `testPayment`입니다")
|
|
@@ -460,9 +476,8 @@ const cashReceiptField = cashReceiptRequestSchema.optional().describe("현금영
|
|
|
460
476
|
const startPaymentRequestSchema = z.object({
|
|
461
477
|
option: paymentOptionSchema,
|
|
462
478
|
returnUrl: z.url().max(2048).describe("결제를 마치면 돌아올 스토어프론트 주소. 스토어 결제 도메인에 등록된 도메인이어야 한다"),
|
|
463
|
-
shippingAddress: shippingAddressInputSchema.optional().describe("배송지. 주문서의 `requiresShipping`이 true면 필수이고 없으면 400 `SHIPPING_ADDRESS_REQUIRED`다. 배송이 필요 없는 주문(
|
|
479
|
+
shippingAddress: shippingAddressInputSchema.optional().describe("배송지. 주문서의 `requiresShipping`이 true면 필수이고 없으면 400 `SHIPPING_ADDRESS_REQUIRED`다. 배송이 필요 없는 주문(배송 없는 상품만)은 보내지 않아도 된다. 보내면 형식을 검사한 뒤 버린다"),
|
|
464
480
|
guest: guestInfoSchema.optional(),
|
|
465
|
-
withdrawalAgreement: z.boolean().optional().describe("청약철회 제한 동의. 주문서의 `withdrawal.required`가 true면 true여야 하고 아니면 400 `WITHDRAWAL_AGREEMENT_REQUIRED`다. 동의 시각이 주문에 남는다"),
|
|
466
481
|
cashReceipt: cashReceiptField,
|
|
467
482
|
coupons: couponApplicationListSchema.optional().describe("적용할 쿠폰(이슈 #47). 결제 시작이 쿠폰을 예약하고 할인한 금액으로 결제 금액을 정한다 — 응답의 `amounts`가 확정 금액이다. 적용하지 못하는 쿠폰이 하나라도 있으면 400 `COUPON_NOT_APPLICABLE`(`details`에 사유)이다. 결제가 실패하거나 만료되면 예약이 풀린다. 쿠폰을 바꾸려면 새로 결제를 시작한다(재시도는 같은 쿠폰을 쓴다)")
|
|
468
483
|
});
|
|
@@ -537,4 +552,4 @@ const paymentMessageSchema = z.object({
|
|
|
537
552
|
orderId: z.string().optional()
|
|
538
553
|
});
|
|
539
554
|
//#endregion
|
|
540
|
-
export { startPaymentRequestSchema as A, myCouponListQuerySchema as B, paymentStartSchema as C, residentNumberLike as D, remoteAreaSchema as E, checkoutPricingSchema as F,
|
|
555
|
+
export { lineFulfillmentSchema as $, startPaymentRequestSchema as A, myCouponListQuerySchema as B, paymentStartSchema as C, residentNumberLike as D, remoteAreaSchema as E, checkoutPricingSchema as F, customInputEntrySchema as G, pricingAmountsSchema as H, couponApplicationListSchema as I, customInputViewSchema as J, customInputLength as K, couponApplicationSchema as L, MIN_PAYMENT_AMOUNT as M, applicableCouponSchema as N, retryPaymentRequestSchema as O, checkoutPricingRequestSchema as P, optionSelectionViewSchema as Q, couponBenefitViewSchema as R, paymentOptionSchema as S, pgProviderSchema as T, addonGroupViewSchema as U, myCouponSchema as V, addonSelectionSchema as W, lineSelectionResponseShape as X, lineSelectionRequestShape as Y, normalizeCustomInputValue as Z, paymentFailureCategorySchema as _, cashReceiptAvailable as a, paymentOptionKey as b, cashReceiptTypeSchema as c, createCheckoutRequestSchema as d, myOrderItemFulfillmentSnapshotSchema as et, deliveryQuoteRequestSchema as f, guestInfoSchema as g, easyPayProviderSchema as h, availablePaymentOptionSchema as i, MAX_COUPONS_PER_CHECKOUT as j, shippingAddressInputSchema as k, checkoutDeliverySchema as l, easyPayProviderResponseSchema as m, PAYMENT_RESULT_VALUES as n, productFulfillmentViewSchema as nt, cashReceiptIdentityTypeOf as o, deliveryQuoteSchema as p, customInputValueViewSchema as q, PAYMENT_STATUS_VALUES as r, cashReceiptRequestSchema as s, CASH_RECEIPT_METHODS as t, productCardFulfillmentSchema as tt, checkoutSessionSchema as u, paymentMessageSchema as v, paymentStatusSchema as w, paymentOptionListSchema as x, paymentMethodSchema as y, couponResultSchema as z };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as ANALYTICS_VISITOR_HEADER, r as ANALYTICS_SESSION_HEADER } from "./analytics-CgD70OqH.mjs";
|
|
2
|
-
import { A as startPaymentRequestSchema, C as paymentStartSchema, F as checkoutPricingSchema,
|
|
2
|
+
import { $ as lineFulfillmentSchema, A as startPaymentRequestSchema, C as paymentStartSchema, F as checkoutPricingSchema, J as customInputViewSchema, N as applicableCouponSchema, O as retryPaymentRequestSchema, P as checkoutPricingRequestSchema, U as addonGroupViewSchema, V as myCouponSchema, X as lineSelectionResponseShape, Y as lineSelectionRequestShape, d as createCheckoutRequestSchema, et as myOrderItemFulfillmentSnapshotSchema, f as deliveryQuoteRequestSchema, m as easyPayProviderResponseSchema, nt as productFulfillmentViewSchema, p as deliveryQuoteSchema, tt as productCardFulfillmentSchema, u as checkoutSessionSchema, w as paymentStatusSchema, y as paymentMethodSchema } from "./checkout-C25liqdW.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
//#region src/http.ts
|
|
5
5
|
/** 표준 엔벨로프의 $.error 상세 */
|
|
@@ -243,6 +243,7 @@ const cartItemSchema = z.object({
|
|
|
243
243
|
thumbnailUrl: z.url().nullable().describe("담은 상품의 대표 이미지. 없으면 null"),
|
|
244
244
|
optionId: z.string().nullable(),
|
|
245
245
|
optionName: z.string().nullable(),
|
|
246
|
+
...lineSelectionResponseShape,
|
|
246
247
|
quantity: z.number().int(),
|
|
247
248
|
unitPrice: z.number().int(),
|
|
248
249
|
totalPrice: z.number().int(),
|
|
@@ -266,11 +267,14 @@ const cartSchema = z.object({
|
|
|
266
267
|
const addCartItemRequestSchema = z.object({
|
|
267
268
|
productId: z.string(),
|
|
268
269
|
optionId: z.string().optional(),
|
|
269
|
-
quantity: z.number().int().min(1).max(999)
|
|
270
|
+
quantity: z.number().int().min(1).max(999),
|
|
271
|
+
...lineSelectionRequestShape
|
|
270
272
|
});
|
|
271
273
|
const updateCartItemRequestSchema = z.object({
|
|
272
274
|
quantity: z.number().int().min(1).max(999).optional(),
|
|
273
|
-
optionId: z.string().optional()
|
|
275
|
+
optionId: z.string().optional(),
|
|
276
|
+
addons: lineSelectionRequestShape.addons.describe("추가 선택을 통째로 바꾼다. 생략하면 그대로 둔다"),
|
|
277
|
+
customInputs: lineSelectionRequestShape.customInputs.describe("직접 입력값을 통째로 바꾼다. 생략하면 그대로 둔다")
|
|
274
278
|
}).refine((value) => Object.values(value).some((v) => v !== void 0), { message: "최소 1개 필드가 필요합니다" });
|
|
275
279
|
//#endregion
|
|
276
280
|
//#region src/schemas/common.ts
|
|
@@ -347,6 +351,8 @@ const productDetailSchema = productCardSchema.extend({
|
|
|
347
351
|
additionalPrice: z.number().int(),
|
|
348
352
|
soldOut: z.boolean()
|
|
349
353
|
})),
|
|
354
|
+
addonGroups: z.array(addonGroupViewSchema).optional().default([]).describe("추가 선택 옵션명(이슈 #59). 배열 순서가 표시 순서다. 담기·바로 구매의 `addons`로 `{groupId, valueId}`를 보낸다. 없으면 빈 배열. 서버는 항상 싣는다"),
|
|
355
|
+
customInputs: z.array(customInputViewSchema).optional().default([]).describe("직접 입력 항목(이슈 #59). 배열 순서가 표시 순서다. 담기·바로 구매의 `customInputs`로 값을 보낸다. 없으면 빈 배열. 서버는 항상 싣는다"),
|
|
350
356
|
fulfillment: productFulfillmentViewSchema,
|
|
351
357
|
returnPeriodDays: z.number().int().describe("반품·교환을 받는 기간(수령·제공일부터 일수)"),
|
|
352
358
|
categoryPath: z.array(z.object({
|
|
@@ -601,33 +607,19 @@ const myOrderItemSchema = z.object({
|
|
|
601
607
|
productName: z.string(),
|
|
602
608
|
thumbnailUrl: z.url().nullable().describe("주문 시점의 대표 이미지. 없었으면 null"),
|
|
603
609
|
optionName: z.string().nullable(),
|
|
610
|
+
...lineSelectionResponseShape,
|
|
604
611
|
quantity: z.number().int().describe("주문 수량"),
|
|
605
612
|
canceledQuantity: z.number().int().describe("취소·반품으로 환불된 누적 수량. 부분 취소가 없었으면 0이다"),
|
|
606
613
|
activeQuantity: z.number().int().describe("남은 수량 (`quantity` − `canceledQuantity`). 취소·반품·교환 요청 수량의 상한이다"),
|
|
607
614
|
totalPrice: z.number().int().describe("주문상품 금액 (즉시할인 반영, 쿠폰 전)"),
|
|
608
615
|
couponDiscountAmount: z.number().int().optional().default(0).describe("이 주문상품에 배분된 쿠폰 할인. 실결제 금액은 `totalPrice − couponDiscountAmount`다. 쿠폰이 없으면 0. 서버는 항상 싣는다"),
|
|
609
616
|
status: orderItemStatusSchema,
|
|
610
|
-
fulfillmentSnapshot: myOrderItemFulfillmentSnapshotSchema.describe("주문 시점 이행 스냅샷(이슈 #57). `type`이 주문 시점 상품 유형이다. 배송
|
|
617
|
+
fulfillmentSnapshot: myOrderItemFulfillmentSnapshotSchema.describe("주문 시점 이행 스냅샷(이슈 #57). `type`이 주문 시점 상품 유형이다. 배송 없는 상품(`MANUAL`)이면 `DELIVERED`는 제공 완료다"),
|
|
611
618
|
fulfillment: z.object({
|
|
612
|
-
status: z.string().describe("제공 상태. `FULFILLED`(제공함)·`REVOKED`(
|
|
619
|
+
status: z.string().describe("제공 상태. `FULFILLED`(제공함)·`REVOKED`(전량 취소·환불로 회수함). 값이 추가될 수 있어 문자열로 받는다"),
|
|
613
620
|
fulfilledAt: z.string().describe("제공 시각 (ISO 8601)"),
|
|
614
|
-
note: z.string().nullable().describe("
|
|
615
|
-
|
|
616
|
-
codeId: z.string(),
|
|
617
|
-
hint: z.string().describe("가린 코드 — 끝 4자만 보인다(예: `****AB12`)"),
|
|
618
|
-
revealedAt: z.string().nullable().describe("처음 열람한 시각. 열람 전이면 null")
|
|
619
|
-
})).optional().default([]).describe("코드 발급 상품의 코드(가린 값). 평문은 `fulfillment/reveal`로 연다. 환불로 회수된 코드는 싣지 않는다. 서버는 항상 싣는다"),
|
|
620
|
-
download: z.object({
|
|
621
|
-
count: z.number().int().describe("지금까지 받은 횟수"),
|
|
622
|
-
limit: z.number().int().describe("받을 수 있는 횟수"),
|
|
623
|
-
expiresAt: z.string().nullable().describe("받을 수 있는 기한 (ISO 8601)"),
|
|
624
|
-
files: z.array(z.object({
|
|
625
|
-
assetId: z.string(),
|
|
626
|
-
fileName: z.string(),
|
|
627
|
-
sizeBytes: z.number().int().nullable()
|
|
628
|
-
}))
|
|
629
|
-
}).nullable().optional().default(null).describe("파일 다운로드 상품의 횟수·기한·파일 목록. 파일 주소는 `downloads`로 받는다. 다른 유형은 null. 서버는 항상 싣는다")
|
|
630
|
-
}).nullable().optional().default(null).describe("비실물 상품(이용권·방문 수령 등)의 제공 정보(이슈 #48). 제공 전이거나 배송 상품이면 null이다. 비실물의 `DELIVERED`는 제공 완료(방문 수령은 수령 완료)로 표시한다. 서버는 항상 싣는다"),
|
|
621
|
+
note: z.string().nullable().describe("판매자가 제공 처리 때 남긴 이용 안내. 없으면 null")
|
|
622
|
+
}).nullable().optional().default(null).describe("배송 없는 상품의 제공 기록(이슈 #48). 제공 전이거나 배송 상품이면 null이다. 배송 없는 상품의 `DELIVERED`는 제공 완료로 표시한다. 서버는 항상 싣는다"),
|
|
631
623
|
claimStatus: z.string().nullable(),
|
|
632
624
|
reviewWritten: z.boolean(),
|
|
633
625
|
autoDecisionDate: z.string().nullable()
|
|
@@ -666,7 +658,6 @@ const myOrderSchema = z.object({
|
|
|
666
658
|
paidAt: z.string().nullable(),
|
|
667
659
|
receiptUrl: z.url().nullable()
|
|
668
660
|
}),
|
|
669
|
-
withdrawalAgreedAt: z.string().nullable().optional().default(null).describe("청약철회 제한 안내에 동의한 시각(이슈 #48). 제한 상품이 없던 주문은 null. 서버는 항상 싣는다"),
|
|
670
661
|
testPayment: z.boolean().describe("테스트 결제(샌드박스 결제) 주문인가. true면 실제로 돈이 나가지 않았습니다 — 주문 화면에 테스트 결제 배지를 표시합니다")
|
|
671
662
|
});
|
|
672
663
|
/**
|
|
@@ -698,33 +689,6 @@ const purchaseDecisionResultSchema = z.object({
|
|
|
698
689
|
status: z.literal("PURCHASE_DECIDED"),
|
|
699
690
|
decidedAt: z.string()
|
|
700
691
|
});
|
|
701
|
-
/**
|
|
702
|
-
* 코드 열람 응답 (이슈 #48) — `POST /storefront/v1/me/order-items/{orderItemId}/fulfillment/reveal`(회원)·
|
|
703
|
-
* `POST /storefront/v1/guest/orders/{orderId}/order-items/{orderItemId}/fulfillment/reveal`(비회원).
|
|
704
|
-
* 평문 코드는 이 응답에만 있다. 화면에 보인 뒤 저장하지 않는다(응답은 `Cache-Control: no-store`).
|
|
705
|
-
* 첫 열람 시각은 청약철회 판단의 근거(제공 개시)로 남는다.
|
|
706
|
-
*/
|
|
707
|
-
const fulfillmentRevealSchema = z.object({
|
|
708
|
-
orderItemId: z.string(),
|
|
709
|
-
codes: z.array(z.object({
|
|
710
|
-
codeId: z.string(),
|
|
711
|
-
code: z.string().describe("코드 평문"),
|
|
712
|
-
revealedAt: z.string().describe("처음 열람한 시각")
|
|
713
|
-
}))
|
|
714
|
-
});
|
|
715
|
-
/**
|
|
716
|
-
* 다운로드 요청 (이슈 #48) — `POST /storefront/v1/me/order-items/{orderItemId}/downloads`(회원)·
|
|
717
|
-
* `POST /storefront/v1/guest/orders/{orderId}/order-items/{orderItemId}/downloads`(비회원, 연락처·비밀번호를 함께 보낸다).
|
|
718
|
-
* 파일이 하나면 `assetId`를 생략할 수 있다.
|
|
719
|
-
*/
|
|
720
|
-
const downloadRequestSchema = z.object({ assetId: z.string().min(1).max(64).optional().describe("받을 파일. 파일이 여러 개면 필수다") });
|
|
721
|
-
/** 다운로드 응답 — 수명 300초의 서명 주소. 받을 때마다 횟수가 하나 준다 */
|
|
722
|
-
const downloadLinkSchema = z.object({
|
|
723
|
-
url: z.url().describe("서명 주소. 300초 뒤 만료된다 — 받아서 바로 쓰고 저장하지 않는다"),
|
|
724
|
-
expiresAt: z.string().describe("서명 주소 만료 시각"),
|
|
725
|
-
fileName: z.string(),
|
|
726
|
-
remaining: z.number().int().describe("남은 다운로드 횟수")
|
|
727
|
-
});
|
|
728
692
|
//#endregion
|
|
729
693
|
//#region src/schemas/review.ts
|
|
730
694
|
const publicReviewSchema = z.object({
|
|
@@ -948,27 +912,6 @@ get: () => http.request("GET", "/store", storefrontStoreSchema) },
|
|
|
948
912
|
*/
|
|
949
913
|
getGuestOrder: (orderId, body) => http.request("POST", path`/guest/orders/${orderId}`, myOrderSchema, { body }),
|
|
950
914
|
getDelivery: (orderItemId) => http.request("GET", path`/me/order-items/${orderItemId}/delivery`, deliveryTrackingSchema),
|
|
951
|
-
/**
|
|
952
|
-
* 코드 열람 (이슈 #48) — 코드 발급 상품의 평문 코드. 처음 열람한 시각이 제공 개시 증거로 남는다.
|
|
953
|
-
*
|
|
954
|
-
* 에러: 404 `ORDER_ITEM_NOT_FOUND`(없거나 남의 주문상품) · 404 `FULFILLMENT_NOT_FOUND`(제공 전·회수됨·코드 상품 아님) ·
|
|
955
|
-
* 429 `TOO_MANY_REQUESTS`
|
|
956
|
-
*/
|
|
957
|
-
revealCode: (orderItemId) => http.request("POST", path`/me/order-items/${orderItemId}/fulfillment/reveal`, fulfillmentRevealSchema),
|
|
958
|
-
/**
|
|
959
|
-
* 파일 다운로드 (이슈 #48) — 수명 300초의 서명 주소를 받는다. 받을 때마다 남은 횟수가 준다.
|
|
960
|
-
*
|
|
961
|
-
* 에러: 404 `FULFILLMENT_NOT_FOUND`(제공 전·회수됨·파일 상품 아님) · 409 `DOWNLOAD_LIMIT_REACHED`(횟수 소진) ·
|
|
962
|
-
* 409 `DOWNLOAD_EXPIRED`(기한 지남) · 400 `ASSET_REQUIRED`(파일이 여러 개인데 `assetId` 없음)
|
|
963
|
-
*/
|
|
964
|
-
createDownload: (orderItemId, body = {}) => http.request("POST", path`/me/order-items/${orderItemId}/downloads`, downloadLinkSchema, { body: downloadRequestSchema.parse(body) }),
|
|
965
|
-
/** 비회원 다운로드 — 비회원 주문 조회와 같은 연락처·주문 조회 비밀번호로 확인한다 */
|
|
966
|
-
createGuestDownload: (orderId, orderItemId, body) => http.request("POST", path`/guest/orders/${orderId}/order-items/${orderItemId}/downloads`, downloadLinkSchema, { body }),
|
|
967
|
-
/**
|
|
968
|
-
* 비회원 코드 열람 — 비회원 주문 조회와 같은 연락처·주문 조회 비밀번호로 확인하고 같은 시도 한도를 쓴다.
|
|
969
|
-
* 틀리면 구분 없이 404 `ORDER_NOT_FOUND`다.
|
|
970
|
-
*/
|
|
971
|
-
revealGuestCode: (orderId, orderItemId, body) => http.request("POST", path`/guest/orders/${orderId}/order-items/${orderItemId}/fulfillment/reveal`, fulfillmentRevealSchema, { body }),
|
|
972
915
|
decidePurchase: (orderItemId) => http.requestVoid("POST", path`/me/order-items/${orderItemId}/purchase-decision`)
|
|
973
916
|
},
|
|
974
917
|
myClaims: {
|
|
@@ -1010,4 +953,4 @@ get: () => http.request("GET", "/store", storefrontStoreSchema) },
|
|
|
1010
953
|
};
|
|
1011
954
|
}
|
|
1012
955
|
//#endregion
|
|
1013
|
-
export {
|
|
956
|
+
export { updateCartItemRequestSchema as $, consentSourceSchema as A, categoryNodeSchema as B, createInquiryResultSchema as C, customerInquirySchema as D, customerInquiryCategorySchema as E, claimReturnAddressSchema as F, productSortSchema as G, productDetailSchema as H, claimTypeSchema as I, pageInfoSchema as J, claimStatusSchema as K, createClaimRequestSchema as L, consentUpdateRequestSchema as M, memberConsentsSchema as N, consentActionSchema as O, claimReasonSchema as P, cartSchema as Q, createClaimResultSchema as R, createInquiryRequestSchema as S, createCustomerInquiryRequestSchema as T, productFacetsSchema as U, productCardSchema as V, productPageSchema as W, addCartItemRequestSchema as X, pageSchema as Y, cartItemSchema as Z, memberAddressRequestSchema as _, publicReviewSchema as a, linkIdentityRequestSchema as at, updateProfileRequestSchema as b, updateReviewRequestSchema as c, signupRequestSchema as ct, deliveryTrackingSchema as d, withdrawRequestSchema as dt, anonymousSessionSchema as et, myOrderItemSchema as f, withdrawalBlockedDetailsSchema as ft, trackingStageResponseSchema as g, unwrapData as gt, purchaseDecisionResultSchema as h, toApiError as ht, createReviewResultSchema as i, idpTokenRequestSchema as it, consentStateSchema as j, consentKindSchema as k, updateReviewResultSchema as l, socialProviderSchema as lt, orderShippingAddressSchema as m, buildQuery as mt, storefrontStoreSchema as n, idpAuthorizeRequestSchema as nt, reviewPageSchema as o, loginRequestSchema as ot, myOrderSchema as p, ApiError as pt, orderItemStatusSchema as q, createReviewRequestSchema as r, idpAuthorizeResponseSchema as rt, reviewSummarySchema as s, memberIdentitiesSchema as st, createStorefrontClient as t, idpAgreementsSchema as tt, writableReviewSchema as u, tokenPairSchema as ut, memberAddressSchema as v, publicInquirySchema as w, wishlistAddResultSchema as x, memberSchema as y, myClaimSchema as z };
|