@sayren/store-sdk 0.1.0 → 0.1.1
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 +387 -2
- package/dist/index.mjs +223 -72
- package/package.json +2 -2
- package/src/client.ts +16 -48
- package/src/schemas/category.ts +36 -0
- package/src/schemas/claim.ts +31 -1
- package/src/schemas/common.ts +12 -0
- package/src/schemas/misc.ts +77 -2
- package/src/schemas/order.ts +60 -0
- package/src/schemas/product.ts +30 -7
- package/src/schemas/store.ts +18 -0
package/dist/index.mjs
CHANGED
|
@@ -409,6 +409,72 @@ const categoryPatchRequestSchema = z.object({
|
|
|
409
409
|
metaKeywords: z.string().max(200).nullable().optional()
|
|
410
410
|
});
|
|
411
411
|
const categoryDeleteStrategySchema = z.enum(["reparent", "cascade"]);
|
|
412
|
+
/**
|
|
413
|
+
* `GET /v1/categories` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열). 응답 형태가 쿼리로 갈린다:
|
|
414
|
+
* `q`가 있으면 검색 결과(`CategorySearchResult[]`), 아니면 `tree=true`일 때 트리(`CategoryTreeNode[]`),
|
|
415
|
+
* 둘 다 아니면 목록(`Category[]`)이다.
|
|
416
|
+
*/
|
|
417
|
+
const categoryListQuerySchema = z.object({
|
|
418
|
+
parentId: z.string().optional().describe("이 카테고리의 직계 자식만. 생략하면 최상위 카테고리. `flat=true`면 무시"),
|
|
419
|
+
flat: z.enum(["true", "false"]).optional().describe("`true`면 전체 카테고리를 깊이·순서대로 평탄화"),
|
|
420
|
+
tree: z.enum(["true", "false"]).optional().describe("`true`면 최상위부터 `children`을 채운 트리(`CategoryTreeNode[]`)를 돌려준다"),
|
|
421
|
+
q: z.string().optional().describe("이름 검색(포함, 대소문자 무시). 주면 `fullPath`·`ancestors`가 붙은 검색 결과를 돌려준다")
|
|
422
|
+
});
|
|
423
|
+
/** `DELETE /v1/categories/{categoryId}` 쿼리 — OpenAPI 문서용 형태 */
|
|
424
|
+
const categoryDeleteQuerySchema = z.object({ strategy: categoryDeleteStrategySchema.optional().describe("하위 카테고리·연결 상품 처리 방식. 생략하면 둘 중 하나라도 있을 때 409 `CATEGORY_NOT_EMPTY`다. `reparent`는 직계 자식을 삭제할 카테고리의 부모로 옮기고, `cascade`는 서브트리를 삭제하고 연결 상품을 미분류로 둔다") });
|
|
425
|
+
//#endregion
|
|
426
|
+
//#region src/schemas/common.ts
|
|
427
|
+
const pageInfoSchema = z.object({
|
|
428
|
+
page: z.number().int(),
|
|
429
|
+
size: z.number().int(),
|
|
430
|
+
totalElements: z.number().int(),
|
|
431
|
+
totalPages: z.number().int()
|
|
432
|
+
});
|
|
433
|
+
function pageSchema(item) {
|
|
434
|
+
return pageInfoSchema.extend({ contents: z.array(item) });
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* 목록 쿼리의 `page`·`size` — OpenAPI 문서용 형태(값은 쿼리 문자열). 서버는 숫자가 아니거나 범위를 벗어난
|
|
438
|
+
* 값을 기본값·상한으로 보정한다.
|
|
439
|
+
*/
|
|
440
|
+
function pageQueryShape(options = {}) {
|
|
441
|
+
const { defaultSize = 20, maxSize = 100 } = options;
|
|
442
|
+
return {
|
|
443
|
+
page: z.string().optional().describe("페이지 번호 (1부터, 기본 1)"),
|
|
444
|
+
size: z.string().optional().describe(`페이지 크기 (기본 ${defaultSize}, 최대 ${maxSize})`)
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
const bulkResultSchema = z.object({
|
|
448
|
+
succeeded: z.array(z.string()),
|
|
449
|
+
failed: z.array(z.object({
|
|
450
|
+
id: z.string().optional(),
|
|
451
|
+
productId: z.string().optional(),
|
|
452
|
+
orderItemId: z.string().optional(),
|
|
453
|
+
code: z.string(),
|
|
454
|
+
message: z.string()
|
|
455
|
+
}))
|
|
456
|
+
});
|
|
457
|
+
const orderItemStatusSchema = z.enum([
|
|
458
|
+
"PAYMENT_WAITING",
|
|
459
|
+
"PAID",
|
|
460
|
+
"CONFIRMED",
|
|
461
|
+
"DISPATCHED",
|
|
462
|
+
"DELIVERING",
|
|
463
|
+
"DELIVERED",
|
|
464
|
+
"PURCHASE_DECIDED",
|
|
465
|
+
"CANCELED"
|
|
466
|
+
]);
|
|
467
|
+
const changeTypeSchema = z.enum([
|
|
468
|
+
"ORDER.PAID",
|
|
469
|
+
"ORDER.CONFIRMED",
|
|
470
|
+
"ORDER.DISPATCHED",
|
|
471
|
+
"ORDER.DELIVERED",
|
|
472
|
+
"ORDER.PURCHASE_DECIDED",
|
|
473
|
+
"CLAIM.CANCEL_REQUESTED",
|
|
474
|
+
"CLAIM.RETURN_REQUESTED",
|
|
475
|
+
"CLAIM.EXCHANGE_REQUESTED",
|
|
476
|
+
"ORDER.ADDRESS_CHANGE_REQUESTED"
|
|
477
|
+
]);
|
|
412
478
|
//#endregion
|
|
413
479
|
//#region src/schemas/claim.ts
|
|
414
480
|
const claimTypeSchema = z.enum([
|
|
@@ -460,6 +526,30 @@ const claimSchema = z.object({
|
|
|
460
526
|
requestedAt: z.string(),
|
|
461
527
|
completedAt: z.string().nullable()
|
|
462
528
|
});
|
|
529
|
+
/** `GET /v1/claims` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열) */
|
|
530
|
+
const claimListQuerySchema = z.object({
|
|
531
|
+
type: claimTypeSchema.optional().describe("클레임 유형 필터"),
|
|
532
|
+
status: claimStatusSchema.optional().describe("클레임 상태 필터"),
|
|
533
|
+
orderItemId: z.string().optional().describe("주문상품 id 필터"),
|
|
534
|
+
requestedFrom: z.string().optional().describe("요청 시각 조회 시작 (ISO 8601, 포함)"),
|
|
535
|
+
requestedTo: z.string().optional().describe("요청 시각 조회 끝 (ISO 8601, 포함)"),
|
|
536
|
+
...pageQueryShape()
|
|
537
|
+
});
|
|
538
|
+
/** `GET /v1/claims/{claimId}` 응답 — 클레임 + 상태 이력 */
|
|
539
|
+
const claimDetailSchema = claimSchema.extend({ histories: z.array(z.object({
|
|
540
|
+
status: claimStatusSchema,
|
|
541
|
+
actor: z.enum([
|
|
542
|
+
"BUYER",
|
|
543
|
+
"SELLER",
|
|
544
|
+
"SYSTEM"
|
|
545
|
+
]),
|
|
546
|
+
occurredAt: z.string()
|
|
547
|
+
})).optional() });
|
|
548
|
+
/** `POST /v1/claims/{claimId}/hold` 응답 */
|
|
549
|
+
const claimHoldResultSchema = z.object({
|
|
550
|
+
claimId: z.string(),
|
|
551
|
+
holdExpiresAt: z.string()
|
|
552
|
+
});
|
|
463
553
|
const rejectClaimRequestSchema = z.object({
|
|
464
554
|
reason: z.enum([
|
|
465
555
|
"USED_PRODUCT",
|
|
@@ -478,48 +568,6 @@ const approveClaimResultSchema = z.object({
|
|
|
478
568
|
refundedAt: z.string()
|
|
479
569
|
});
|
|
480
570
|
//#endregion
|
|
481
|
-
//#region src/schemas/common.ts
|
|
482
|
-
const pageInfoSchema = z.object({
|
|
483
|
-
page: z.number().int(),
|
|
484
|
-
size: z.number().int(),
|
|
485
|
-
totalElements: z.number().int(),
|
|
486
|
-
totalPages: z.number().int()
|
|
487
|
-
});
|
|
488
|
-
function pageSchema(item) {
|
|
489
|
-
return pageInfoSchema.extend({ contents: z.array(item) });
|
|
490
|
-
}
|
|
491
|
-
const bulkResultSchema = z.object({
|
|
492
|
-
succeeded: z.array(z.string()),
|
|
493
|
-
failed: z.array(z.object({
|
|
494
|
-
id: z.string().optional(),
|
|
495
|
-
productId: z.string().optional(),
|
|
496
|
-
orderItemId: z.string().optional(),
|
|
497
|
-
code: z.string(),
|
|
498
|
-
message: z.string()
|
|
499
|
-
}))
|
|
500
|
-
});
|
|
501
|
-
const orderItemStatusSchema = z.enum([
|
|
502
|
-
"PAYMENT_WAITING",
|
|
503
|
-
"PAID",
|
|
504
|
-
"CONFIRMED",
|
|
505
|
-
"DISPATCHED",
|
|
506
|
-
"DELIVERING",
|
|
507
|
-
"DELIVERED",
|
|
508
|
-
"PURCHASE_DECIDED",
|
|
509
|
-
"CANCELED"
|
|
510
|
-
]);
|
|
511
|
-
const changeTypeSchema = z.enum([
|
|
512
|
-
"ORDER.PAID",
|
|
513
|
-
"ORDER.CONFIRMED",
|
|
514
|
-
"ORDER.DISPATCHED",
|
|
515
|
-
"ORDER.DELIVERED",
|
|
516
|
-
"ORDER.PURCHASE_DECIDED",
|
|
517
|
-
"CLAIM.CANCEL_REQUESTED",
|
|
518
|
-
"CLAIM.RETURN_REQUESTED",
|
|
519
|
-
"CLAIM.EXCHANGE_REQUESTED",
|
|
520
|
-
"ORDER.ADDRESS_CHANGE_REQUESTED"
|
|
521
|
-
]);
|
|
522
|
-
//#endregion
|
|
523
571
|
//#region src/schemas/misc.ts
|
|
524
572
|
const inquirySchema = z.object({
|
|
525
573
|
inquiryId: z.string(),
|
|
@@ -567,6 +615,21 @@ const sellerCustomerInquirySchema = z.object({
|
|
|
567
615
|
}).nullable(),
|
|
568
616
|
createdAt: z.string()
|
|
569
617
|
});
|
|
618
|
+
const answeredQuery = z.enum(["true", "false"]).optional().describe("답변 여부 필터. `true`면 답변된 문의만, `false`면 미답변만, 생략하면 전부");
|
|
619
|
+
/** `GET /v1/inquiries` 쿼리(상품 문의) — OpenAPI 문서용 형태(값은 쿼리 문자열). 최신순이다 */
|
|
620
|
+
const inquiryListQuerySchema = z.object({
|
|
621
|
+
answered: answeredQuery,
|
|
622
|
+
productId: z.string().optional().describe("상품 id 필터"),
|
|
623
|
+
from: z.string().optional().describe("작성 시각 조회 시작 (ISO 8601, 포함)"),
|
|
624
|
+
...pageQueryShape()
|
|
625
|
+
});
|
|
626
|
+
/** `GET /v1/customer-inquiries` 쿼리(1:1 문의) — OpenAPI 문서용 형태(값은 쿼리 문자열). 최신순이다 */
|
|
627
|
+
const customerInquiryListQuerySchema = z.object({
|
|
628
|
+
answered: answeredQuery,
|
|
629
|
+
category: customerInquiryCategorySchema.optional().describe("문의 유형 필터"),
|
|
630
|
+
from: z.string().optional().describe("작성 시각 조회 시작 (ISO 8601, 포함)"),
|
|
631
|
+
...pageQueryShape()
|
|
632
|
+
});
|
|
570
633
|
const settlementStatusSchema = z.enum([
|
|
571
634
|
"SCHEDULED",
|
|
572
635
|
"PAID",
|
|
@@ -600,6 +663,20 @@ const settlementDetailSchema = z.object({
|
|
|
600
663
|
settlementAmount: z.number().int(),
|
|
601
664
|
purchaseDecidedAt: z.string().nullable()
|
|
602
665
|
});
|
|
666
|
+
/** `GET /v1/settlements/{settlementId}` 응답 — 정산 요약 + 상세 내역(`size`건까지) */
|
|
667
|
+
const settlementWithDetailsSchema = settlementSummarySchema.extend({ details: z.array(settlementDetailSchema).optional() });
|
|
668
|
+
/** `GET /v1/settlements` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열). 정산일 최신순이다 */
|
|
669
|
+
const settlementListQuerySchema = z.object({
|
|
670
|
+
from: z.string().describe("정산일 조회 시작 (ISO 8601, 포함). 필수"),
|
|
671
|
+
to: z.string().optional().describe("정산일 조회 끝 (ISO 8601, 포함). 생략하면 from부터 31일. 기간은 최대 31일"),
|
|
672
|
+
status: settlementStatusSchema.optional().describe("정산 상태 필터"),
|
|
673
|
+
...pageQueryShape()
|
|
674
|
+
});
|
|
675
|
+
/** `GET /v1/settlements/{settlementId}` 쿼리 — `size`는 돌려줄 상세 내역 건수다(`page`는 무시) */
|
|
676
|
+
const settlementDetailQuerySchema = z.object(pageQueryShape({
|
|
677
|
+
defaultSize: 100,
|
|
678
|
+
maxSize: 300
|
|
679
|
+
}));
|
|
603
680
|
const eventTypeSchema = z.enum([
|
|
604
681
|
"ORDER.PAID",
|
|
605
682
|
"ORDER.CONFIRMED",
|
|
@@ -699,6 +776,33 @@ const reviewSchema = z.object({
|
|
|
699
776
|
}).nullable(),
|
|
700
777
|
createdAt: z.string()
|
|
701
778
|
});
|
|
779
|
+
const reviewSortSchema = z.enum([
|
|
780
|
+
"createdAt.desc",
|
|
781
|
+
"createdAt.asc",
|
|
782
|
+
"rating.asc",
|
|
783
|
+
"rating.desc"
|
|
784
|
+
]);
|
|
785
|
+
/** `GET /v1/reviews` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열) */
|
|
786
|
+
const reviewListQuerySchema = z.object({
|
|
787
|
+
productId: z.string().optional().describe("상품 id 필터"),
|
|
788
|
+
rating: z.enum([
|
|
789
|
+
"1",
|
|
790
|
+
"2",
|
|
791
|
+
"3",
|
|
792
|
+
"4",
|
|
793
|
+
"5"
|
|
794
|
+
]).optional().describe("별점 필터 (일치)"),
|
|
795
|
+
replied: z.enum(["true", "false"]).optional().describe("답글 여부 필터. `true`면 답글 단 리뷰만, `false`면 답글 없는 리뷰만"),
|
|
796
|
+
hasImage: z.enum(["true", "false"]).optional().describe("`true`면 이미지가 있는 리뷰만"),
|
|
797
|
+
from: z.string().optional().describe("작성 시각 조회 시작 (ISO 8601, 포함)"),
|
|
798
|
+
sort: reviewSortSchema.optional().describe("정렬 (기본 createdAt.desc)"),
|
|
799
|
+
...pageQueryShape()
|
|
800
|
+
});
|
|
801
|
+
/** `POST /v1/reviews/{reviewId}/report` 응답(202) — 신고 접수 */
|
|
802
|
+
const reviewReportResultSchema = z.object({
|
|
803
|
+
reviewId: z.string(),
|
|
804
|
+
status: z.literal("PENDING_REVIEW")
|
|
805
|
+
});
|
|
702
806
|
//#endregion
|
|
703
807
|
//#region src/schemas/order.ts
|
|
704
808
|
const orderSummarySchema = z.object({
|
|
@@ -835,6 +939,18 @@ const deliveryInfoSchema = z.object({
|
|
|
835
939
|
dispatchedAt: z.string(),
|
|
836
940
|
deliveredAt: z.string().nullable()
|
|
837
941
|
});
|
|
942
|
+
/** `GET /v1/order-items/{orderItemId}/delivery` 응답 — 배송 정보 + 배송 추적 이벤트 */
|
|
943
|
+
const deliveryStatusSchema = deliveryInfoSchema.extend({ trackingEvents: z.array(z.object({
|
|
944
|
+
status: z.string(),
|
|
945
|
+
location: z.string(),
|
|
946
|
+
occurredAt: z.string()
|
|
947
|
+
})).optional() });
|
|
948
|
+
/** `PUT /v1/order-items/{orderItemId}/dispatch/tracking` 응답 — 바뀐 송장 */
|
|
949
|
+
const trackingUpdateResultSchema = z.object({
|
|
950
|
+
orderItemId: z.string(),
|
|
951
|
+
carrierCode: z.string(),
|
|
952
|
+
trackingNumber: z.string()
|
|
953
|
+
});
|
|
838
954
|
const carrierSchema = z.object({
|
|
839
955
|
carrierCode: z.string(),
|
|
840
956
|
name: z.string(),
|
|
@@ -859,6 +975,33 @@ const cancelBySellerRequestSchema = z.object({
|
|
|
859
975
|
]),
|
|
860
976
|
detail: z.string().max(500).optional()
|
|
861
977
|
});
|
|
978
|
+
/** `POST /v1/order-items/{orderItemId}/cancel` 응답 — 셀러 직권취소 환불 결과 */
|
|
979
|
+
const cancelBySellerResultSchema = z.object({
|
|
980
|
+
orderItemId: z.string(),
|
|
981
|
+
refundAmount: z.number().int(),
|
|
982
|
+
refundedAt: z.string()
|
|
983
|
+
});
|
|
984
|
+
/** `PUT /v1/order-items/{orderItemId}/memo` 응답 — 빈 문자열로 저장하면 메모가 지워져 `null`이다 */
|
|
985
|
+
const orderItemMemoResultSchema = z.object({
|
|
986
|
+
orderItemId: z.string(),
|
|
987
|
+
sellerMemo: z.string().nullable()
|
|
988
|
+
});
|
|
989
|
+
/** `POST /v1/order-items/{orderItemId}/purchase-decision/request` 응답 */
|
|
990
|
+
const purchaseDecisionRequestResultSchema = z.object({
|
|
991
|
+
orderItemId: z.string(),
|
|
992
|
+
requestedAt: z.string()
|
|
993
|
+
});
|
|
994
|
+
/** `POST /v1/order-items/{orderItemId}/purchase-decision/extend` 응답 — 연장은 최대 2회 */
|
|
995
|
+
const purchaseDecisionExtendResultSchema = z.object({
|
|
996
|
+
orderItemId: z.string(),
|
|
997
|
+
autoDecisionDate: z.string(),
|
|
998
|
+
extendCount: z.number().int().max(2)
|
|
999
|
+
});
|
|
1000
|
+
/**
|
|
1001
|
+
* `GET /v1/orders/{orderId}/address-change-requests` 응답 — 배송지 변경 요청 플로우는 아직 제공하지 않아
|
|
1002
|
+
* 현재는 항상 빈 배열이다
|
|
1003
|
+
*/
|
|
1004
|
+
const addressChangeRequestListSchema = z.array(z.record(z.string(), z.unknown())).describe("배송지 변경 요청 목록 (현재 항상 빈 배열)");
|
|
862
1005
|
//#endregion
|
|
863
1006
|
//#region src/schemas/payment.ts
|
|
864
1007
|
/**
|
|
@@ -1340,6 +1483,28 @@ const productPatchRequestSchema = z.object({
|
|
|
1340
1483
|
status: productStatusSchema.optional(),
|
|
1341
1484
|
deliveryFee: z.number().int().optional()
|
|
1342
1485
|
}).refine((value) => Object.values(value).some((v) => v !== void 0), { message: "최소 1개 필드가 필요합니다" });
|
|
1486
|
+
const productSortSchema = z.enum([
|
|
1487
|
+
"createdAt.desc",
|
|
1488
|
+
"createdAt.asc",
|
|
1489
|
+
"salePrice.asc",
|
|
1490
|
+
"salePrice.desc",
|
|
1491
|
+
"updatedAt.desc"
|
|
1492
|
+
]);
|
|
1493
|
+
/** `GET /v1/products` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열) */
|
|
1494
|
+
const productListQuerySchema = z.object({
|
|
1495
|
+
status: productStatusSchema.optional().describe("판매 상태 필터"),
|
|
1496
|
+
categoryId: z.string().optional().describe("카테고리 필터 — 하위 카테고리의 상품도 포함"),
|
|
1497
|
+
keyword: z.string().optional().describe("상품명 검색 (포함)"),
|
|
1498
|
+
sellerCode: z.string().optional().describe("판매자 상품코드 — 이 코드가 붙은 variant를 가진 상품"),
|
|
1499
|
+
sort: productSortSchema.optional().describe("정렬 (기본 createdAt.desc)"),
|
|
1500
|
+
...pageQueryShape()
|
|
1501
|
+
});
|
|
1502
|
+
/** `POST /v1/product-images` 응답 — 업로드된 이미지의 CDN 주소 */
|
|
1503
|
+
const productImageUploadResultSchema = z.object({ images: z.array(z.object({
|
|
1504
|
+
url: z.url(),
|
|
1505
|
+
width: z.number().int(),
|
|
1506
|
+
height: z.number().int()
|
|
1507
|
+
})) });
|
|
1343
1508
|
const discountSchema = z.object({
|
|
1344
1509
|
productId: z.string(),
|
|
1345
1510
|
discountType: z.enum(["RATE", "AMOUNT"]),
|
|
@@ -1453,7 +1618,16 @@ const invitationSchema = z.object({
|
|
|
1453
1618
|
expiresAt: z.string(),
|
|
1454
1619
|
createdAt: z.string()
|
|
1455
1620
|
});
|
|
1621
|
+
/** `GET /v1/store/invitations` 쿼리 — OpenAPI 문서용 형태 */
|
|
1622
|
+
const invitationListQuerySchema = z.object({ status: invitationSchema.shape.status.optional().describe("초대 상태 필터") });
|
|
1623
|
+
/** `PATCH /v1/store/members/{userId}` 응답 — 바뀐 역할 */
|
|
1624
|
+
const storeMemberRoleUpdatedSchema = z.object({
|
|
1625
|
+
userId: z.string(),
|
|
1626
|
+
role: z.enum(["ADMIN", "STAFF"])
|
|
1627
|
+
});
|
|
1456
1628
|
const addressTypeSchema = z.enum(["SHIPPING", "RETURN"]);
|
|
1629
|
+
/** `GET /v1/seller-addresses` 쿼리 — OpenAPI 문서용 형태. 기본 주소 우선, 그다음 등록순이다 */
|
|
1630
|
+
const sellerAddressListQuerySchema = z.object({ type: addressTypeSchema.optional().describe("주소 유형 필터") });
|
|
1457
1631
|
const sellerAddressSchema = z.object({
|
|
1458
1632
|
addressId: z.string(),
|
|
1459
1633
|
type: addressTypeSchema,
|
|
@@ -1681,21 +1855,13 @@ function createStoreClient(options) {
|
|
|
1681
1855
|
}),
|
|
1682
1856
|
hold: (orderItemId, body) => storeHttp.requestVoid("POST", path`/order-items/${orderItemId}/hold`, { body: holdOrderItemRequestSchema.parse(body) }),
|
|
1683
1857
|
releaseHold: (orderItemId) => storeHttp.requestVoid("DELETE", path`/order-items/${orderItemId}/hold`),
|
|
1684
|
-
cancelBySeller: (orderItemId, body, idempotencyKey) => storeHttp.request("POST", path`/order-items/${orderItemId}/cancel`,
|
|
1685
|
-
orderItemId: z.string(),
|
|
1686
|
-
refundAmount: z.number().int(),
|
|
1687
|
-
refundedAt: z.string()
|
|
1688
|
-
}), {
|
|
1858
|
+
cancelBySeller: (orderItemId, body, idempotencyKey) => storeHttp.request("POST", path`/order-items/${orderItemId}/cancel`, cancelBySellerResultSchema, {
|
|
1689
1859
|
body: cancelBySellerRequestSchema.parse(body),
|
|
1690
1860
|
headers: idempotency(idempotencyKey)
|
|
1691
1861
|
}),
|
|
1692
1862
|
updateMemo: (orderItemId, memo) => storeHttp.requestVoid("PUT", path`/order-items/${orderItemId}/memo`, { body: { memo } }),
|
|
1693
1863
|
requestPurchaseDecision: (orderItemId) => storeHttp.requestVoid("POST", path`/order-items/${orderItemId}/purchase-decision/request`),
|
|
1694
|
-
extendPurchaseDecision: (orderItemId) => storeHttp.request("POST", path`/order-items/${orderItemId}/purchase-decision/extend`,
|
|
1695
|
-
orderItemId: z.string(),
|
|
1696
|
-
autoDecisionDate: z.string(),
|
|
1697
|
-
extendCount: z.number().int().max(2)
|
|
1698
|
-
})),
|
|
1864
|
+
extendPurchaseDecision: (orderItemId) => storeHttp.request("POST", path`/order-items/${orderItemId}/purchase-decision/extend`, purchaseDecisionExtendResultSchema),
|
|
1699
1865
|
dispatch: (orderItemId, body, idempotencyKey) => storeHttp.request("POST", path`/order-items/${orderItemId}/dispatch`, deliveryInfoSchema, {
|
|
1700
1866
|
body: dispatchRequestSchema.parse(body),
|
|
1701
1867
|
headers: idempotency(idempotencyKey)
|
|
@@ -1708,24 +1874,12 @@ function createStoreClient(options) {
|
|
|
1708
1874
|
carrierCode,
|
|
1709
1875
|
trackingNumber
|
|
1710
1876
|
} }),
|
|
1711
|
-
getDelivery: (orderItemId) => storeHttp.request("GET", path`/order-items/${orderItemId}/delivery`,
|
|
1712
|
-
status: z.string(),
|
|
1713
|
-
location: z.string(),
|
|
1714
|
-
occurredAt: z.string()
|
|
1715
|
-
})).optional() }))
|
|
1877
|
+
getDelivery: (orderItemId) => storeHttp.request("GET", path`/order-items/${orderItemId}/delivery`, deliveryStatusSchema)
|
|
1716
1878
|
},
|
|
1717
1879
|
carriers: { list: () => storeHttp.request("GET", "/carriers", z.array(carrierSchema)) },
|
|
1718
1880
|
claims: {
|
|
1719
1881
|
list: (params) => storeHttp.request("GET", "/claims", pageSchema(claimSchema), { query: params }),
|
|
1720
|
-
get: (claimId) => storeHttp.request("GET", path`/claims/${claimId}`,
|
|
1721
|
-
status: claimStatusSchema,
|
|
1722
|
-
actor: z.enum([
|
|
1723
|
-
"BUYER",
|
|
1724
|
-
"SELLER",
|
|
1725
|
-
"SYSTEM"
|
|
1726
|
-
]),
|
|
1727
|
-
occurredAt: z.string()
|
|
1728
|
-
})).optional() })),
|
|
1882
|
+
get: (claimId) => storeHttp.request("GET", path`/claims/${claimId}`, claimDetailSchema),
|
|
1729
1883
|
approve: (claimId, deductAmount, idempotencyKey) => storeHttp.request("POST", path`/claims/${claimId}/approve`, approveClaimResultSchema, {
|
|
1730
1884
|
body: deductAmount !== void 0 ? { deductAmount } : {},
|
|
1731
1885
|
headers: idempotency(idempotencyKey)
|
|
@@ -1737,10 +1891,7 @@ function createStoreClient(options) {
|
|
|
1737
1891
|
carrierCode,
|
|
1738
1892
|
trackingNumber
|
|
1739
1893
|
} }),
|
|
1740
|
-
hold: (claimId, reason) => storeHttp.request("POST", path`/claims/${claimId}/hold`,
|
|
1741
|
-
claimId: z.string(),
|
|
1742
|
-
holdExpiresAt: z.string()
|
|
1743
|
-
}), { body: { reason } }),
|
|
1894
|
+
hold: (claimId, reason) => storeHttp.request("POST", path`/claims/${claimId}/hold`, claimHoldResultSchema, { body: { reason } }),
|
|
1744
1895
|
releaseHold: (claimId) => storeHttp.requestVoid("DELETE", path`/claims/${claimId}/hold`)
|
|
1745
1896
|
},
|
|
1746
1897
|
inquiries: {
|
|
@@ -1763,7 +1914,7 @@ function createStoreClient(options) {
|
|
|
1763
1914
|
/** @deprecated `salesReport.get`을 쓴다. 기존 정산 레코드 조회만 유지된다 */
|
|
1764
1915
|
list: (params) => storeHttp.request("GET", "/settlements", pageSchema(settlementSummarySchema), { query: params }),
|
|
1765
1916
|
/** @deprecated `salesReport.get`을 쓴다. 기존 정산 레코드 조회만 유지된다 */
|
|
1766
|
-
get: (settlementId, params) => storeHttp.request("GET", path`/settlements/${settlementId}`,
|
|
1917
|
+
get: (settlementId, params) => storeHttp.request("GET", path`/settlements/${settlementId}`, settlementWithDetailsSchema, { query: params })
|
|
1767
1918
|
},
|
|
1768
1919
|
/**
|
|
1769
1920
|
* 매출 리포트 (정산 API 대체) — 스코프 `settlement:r`. PG 승인 시각 기준 결제, PG 취소 완료 시각 기준
|
|
@@ -2297,4 +2448,4 @@ function createStoreSession(options) {
|
|
|
2297
2448
|
};
|
|
2298
2449
|
}
|
|
2299
2450
|
//#endregion
|
|
2300
|
-
export { ApiError, MAX_OPTION_GROUPS, MAX_VALUES_PER_GROUP, MAX_VARIANTS, PAYMENT_ROUTING_EXCLUSION_CODES, PORTONE_CHANNEL_NAME_MAX_LENGTH, PORTONE_MAX_CHANNELS, PORTONE_MIN_CHANNELS, RESERVED_STORE_CODES, STORE_CODE_PATTERN, STORE_ROLE_SCOPES, STORE_SCOPE_RESOURCES, STORE_SESSION_KEYS, TOSS_WIDGET_CLIENT_KEY_PATTERN, TOSS_WIDGET_KEY_MESSAGE, TOSS_WIDGET_SECRET_KEY_PATTERN, VARIANT_STOCK_EXCLUSIVE_MESSAGE, WEBHOOK_DEFAULT_TOLERANCE_SEC, WEBHOOK_DELIVERY_ID_HEADER, WEBHOOK_EVENT_ID_HEADER, WEBHOOK_EVENT_TYPE_HEADER, WEBHOOK_HEADERS, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_USER_AGENT, addressTypeSchema, apiClientListQuerySchema, apiClientSchema, apiClientSecretRotatedSchema, apiClientStatusSchema, apiClientTypeSchema, apiLogErrorSchema, apiLogListQuerySchema, apiLogPageSchema, apiLogPrincipalSchema, apiLogPrincipalTypeSchema, apiLogSchema, apiLogStatusFilterSchema, apiLogSummarySchema, apiTokenCreateRequestSchema, apiTokenCreatedSchema, apiTokenSchema, approveClaimResultSchema, buildAuthorizeUrl, buildQuery, bulkResultSchema, cancelBySellerRequestSchema, carrierSchema, categoryAttributeSchema, categoryCreateRequestSchema, categoryDeleteStrategySchema, categoryPatchRequestSchema, categoryProductSortSchema, categorySchema, categorySearchResultSchema, categoryTreeNodeSchema, categoryWithPathSchema, changeTypeSchema, claimReasonSchema, claimSchema, claimStatusSchema, claimTypeSchema, claimWebhookEventDataSchema, claimWebhookEventSchema, clientCredentialsTokenResponseSchema, createPkcePair, createStoreClient, createStoreSession, customerInquiryCategorySchema, deliveryInfoSchema, deliveryMethodSchema, deliveryTypeSchema, discountRequestSchema, discountSchema, dispatchRequestSchema, effectivePaymentRoutingModeSchema, eventTypeSchema, exchangeAuthorizationCode, exchangeStoreTokenViaOAuth, holdOrderItemRequestSchema, inquirySchema, inquiryWebhookEventDataSchema, inquiryWebhookEventSchema, invitationSchema, isReservedStoreCode, isStoreScope, liveGateConditionCodeSchema, liveGateConditionSchema, liveGateErrorDetailsSchema, liveGateSchema, maskedSecretSchema, myAccountSchema, myStoreSchema, oauthClientRegistrationRequestSchema, oauthClientRegistrationResponseSchema, oauthTokenResponseSchema, optionGroupRequestSchema, optionGroupSchema, optionModelRequestSchema, optionModelSchema, optionValueRequestSchema, optionValueSchema, orderItemListQuerySchema, orderItemPageSchema, orderItemSchema, orderItemStatusSchema, orderListQuerySchema, orderSchema, orderSummaryPageSchema, orderSummarySchema, orderWebhookEventDataSchema, orderWebhookEventSchema, pageInfoSchema, pageSchema, paymentAttemptRecordSchema, paymentAttemptStatusSchema, paymentCredentialSetSchema, paymentListQuerySchema, paymentProviderSchema, paymentProviderVerificationSchema, paymentRecordDetailSchema, paymentRecordPageSchema, paymentRecordSchema, paymentRecordStatusSchema, paymentRefundRecordSchema, paymentRoutingModeSchema, paymentSettingsSchema, pgEnvironmentSchema, pgPaymentMethodSchema, pgProviderSchema, pgVerificationResultSchema, portOneChannelSchema, portOneCredentialsInputSchema, productCreateRequestSchema, productOutOfStockWebhookEventDataSchema, productOutOfStockWebhookEventSchema, productPatchRequestSchema, productSchema, productStatusSchema, productSummarySchema, productVariantRequestSchema, productVariantSchema, refreshUserToken, rejectClaimRequestSchema, reviewSchema, reviewWebhookEventDataSchema, reviewWebhookEventSchema, salesReportGroupBySchema, salesReportQuerySchema, salesReportRowSchema, salesReportSchema, salesTotalsSchema, scopeAccessSchema, sellerAddressRequestSchema, sellerAddressSchema, sellerCustomerInquirySchema, settlementDetailSchema, settlementStatusSchema, settlementSummarySchema, shippingAddressSchema, storeCodeSchema, storeMemberSchema, storeRoleSchema, storeSchema, storeScopeResourceSchema, storeTokenResponseSchema, tossPaymentsCredentialsInputSchema, updatePaymentProviderRequestSchema, updatePaymentSettingsRequestSchema, uploadRequestSchema, uploadTicketSchema, upsertPortOneProviderRequestSchema, upsertTossPaymentsProviderRequestSchema, userTokenResponseSchema, variantStockRequestSchema, variantStockSchema, verifyPaymentProviderRequestSchema, webhookCreatedSchema, webhookDeliveryErrorCodeSchema, webhookDeliveryListQuerySchema, webhookDeliverySchema, webhookDeliveryStatusSchema, webhookEventSchema, webhookRedeliverFailedResultSchema, webhookRequestSchema, webhookSchema, webhookSecretRotatedSchema, webhookStatusSchema, webhookTestRequestSchema, webhookTestResultSchema };
|
|
2451
|
+
export { ApiError, MAX_OPTION_GROUPS, MAX_VALUES_PER_GROUP, MAX_VARIANTS, PAYMENT_ROUTING_EXCLUSION_CODES, PORTONE_CHANNEL_NAME_MAX_LENGTH, PORTONE_MAX_CHANNELS, PORTONE_MIN_CHANNELS, RESERVED_STORE_CODES, STORE_CODE_PATTERN, STORE_ROLE_SCOPES, STORE_SCOPE_RESOURCES, STORE_SESSION_KEYS, TOSS_WIDGET_CLIENT_KEY_PATTERN, TOSS_WIDGET_KEY_MESSAGE, TOSS_WIDGET_SECRET_KEY_PATTERN, VARIANT_STOCK_EXCLUSIVE_MESSAGE, WEBHOOK_DEFAULT_TOLERANCE_SEC, WEBHOOK_DELIVERY_ID_HEADER, WEBHOOK_EVENT_ID_HEADER, WEBHOOK_EVENT_TYPE_HEADER, WEBHOOK_HEADERS, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_USER_AGENT, addressChangeRequestListSchema, addressTypeSchema, apiClientListQuerySchema, apiClientSchema, apiClientSecretRotatedSchema, apiClientStatusSchema, apiClientTypeSchema, apiLogErrorSchema, apiLogListQuerySchema, apiLogPageSchema, apiLogPrincipalSchema, apiLogPrincipalTypeSchema, apiLogSchema, apiLogStatusFilterSchema, apiLogSummarySchema, apiTokenCreateRequestSchema, apiTokenCreatedSchema, apiTokenSchema, approveClaimResultSchema, buildAuthorizeUrl, buildQuery, bulkResultSchema, cancelBySellerRequestSchema, cancelBySellerResultSchema, carrierSchema, categoryAttributeSchema, categoryCreateRequestSchema, categoryDeleteQuerySchema, categoryDeleteStrategySchema, categoryListQuerySchema, categoryPatchRequestSchema, categoryProductSortSchema, categorySchema, categorySearchResultSchema, categoryTreeNodeSchema, categoryWithPathSchema, changeTypeSchema, claimDetailSchema, claimHoldResultSchema, claimListQuerySchema, claimReasonSchema, claimSchema, claimStatusSchema, claimTypeSchema, claimWebhookEventDataSchema, claimWebhookEventSchema, clientCredentialsTokenResponseSchema, createPkcePair, createStoreClient, createStoreSession, customerInquiryCategorySchema, customerInquiryListQuerySchema, deliveryInfoSchema, deliveryMethodSchema, deliveryStatusSchema, deliveryTypeSchema, discountRequestSchema, discountSchema, dispatchRequestSchema, effectivePaymentRoutingModeSchema, eventTypeSchema, exchangeAuthorizationCode, exchangeStoreTokenViaOAuth, holdOrderItemRequestSchema, inquiryListQuerySchema, inquirySchema, inquiryWebhookEventDataSchema, inquiryWebhookEventSchema, invitationListQuerySchema, invitationSchema, isReservedStoreCode, isStoreScope, liveGateConditionCodeSchema, liveGateConditionSchema, liveGateErrorDetailsSchema, liveGateSchema, maskedSecretSchema, myAccountSchema, myStoreSchema, oauthClientRegistrationRequestSchema, oauthClientRegistrationResponseSchema, oauthTokenResponseSchema, optionGroupRequestSchema, optionGroupSchema, optionModelRequestSchema, optionModelSchema, optionValueRequestSchema, optionValueSchema, orderItemListQuerySchema, orderItemMemoResultSchema, orderItemPageSchema, orderItemSchema, orderItemStatusSchema, orderListQuerySchema, orderSchema, orderSummaryPageSchema, orderSummarySchema, orderWebhookEventDataSchema, orderWebhookEventSchema, pageInfoSchema, pageQueryShape, pageSchema, paymentAttemptRecordSchema, paymentAttemptStatusSchema, paymentCredentialSetSchema, paymentListQuerySchema, paymentProviderSchema, paymentProviderVerificationSchema, paymentRecordDetailSchema, paymentRecordPageSchema, paymentRecordSchema, paymentRecordStatusSchema, paymentRefundRecordSchema, paymentRoutingModeSchema, paymentSettingsSchema, pgEnvironmentSchema, pgPaymentMethodSchema, pgProviderSchema, pgVerificationResultSchema, portOneChannelSchema, portOneCredentialsInputSchema, productCreateRequestSchema, productImageUploadResultSchema, productListQuerySchema, productOutOfStockWebhookEventDataSchema, productOutOfStockWebhookEventSchema, productPatchRequestSchema, productSchema, productSortSchema, productStatusSchema, productSummarySchema, productVariantRequestSchema, productVariantSchema, purchaseDecisionExtendResultSchema, purchaseDecisionRequestResultSchema, refreshUserToken, rejectClaimRequestSchema, reviewListQuerySchema, reviewReportResultSchema, reviewSchema, reviewSortSchema, reviewWebhookEventDataSchema, reviewWebhookEventSchema, salesReportGroupBySchema, salesReportQuerySchema, salesReportRowSchema, salesReportSchema, salesTotalsSchema, scopeAccessSchema, sellerAddressListQuerySchema, sellerAddressRequestSchema, sellerAddressSchema, sellerCustomerInquirySchema, settlementDetailQuerySchema, settlementDetailSchema, settlementListQuerySchema, settlementStatusSchema, settlementSummarySchema, settlementWithDetailsSchema, shippingAddressSchema, storeCodeSchema, storeMemberRoleUpdatedSchema, storeMemberSchema, storeRoleSchema, storeSchema, storeScopeResourceSchema, storeTokenResponseSchema, tossPaymentsCredentialsInputSchema, trackingUpdateResultSchema, updatePaymentProviderRequestSchema, updatePaymentSettingsRequestSchema, uploadRequestSchema, uploadTicketSchema, upsertPortOneProviderRequestSchema, upsertTossPaymentsProviderRequestSchema, userTokenResponseSchema, variantStockRequestSchema, variantStockSchema, verifyPaymentProviderRequestSchema, webhookCreatedSchema, webhookDeliveryErrorCodeSchema, webhookDeliveryListQuerySchema, webhookDeliverySchema, webhookDeliveryStatusSchema, webhookEventSchema, webhookRedeliverFailedResultSchema, webhookRequestSchema, webhookSchema, webhookSecretRotatedSchema, webhookStatusSchema, webhookTestRequestSchema, webhookTestResultSchema };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sayren/store-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"main": "./dist/index.mjs",
|
|
5
5
|
"types": "./dist/index.d.mts",
|
|
6
6
|
"exports": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"license": "UNLICENSED",
|
|
32
32
|
"repository": {
|
|
33
33
|
"type": "git",
|
|
34
|
-
"url": "git+https://github.com/
|
|
34
|
+
"url": "git+https://github.com/avarcorp/sayren.git"
|
|
35
35
|
},
|
|
36
36
|
"files": [
|
|
37
37
|
"dist",
|
package/src/client.ts
CHANGED
|
@@ -34,8 +34,9 @@ import {
|
|
|
34
34
|
import {
|
|
35
35
|
approveClaimResultSchema,
|
|
36
36
|
type ClaimListParams,
|
|
37
|
+
claimDetailSchema,
|
|
38
|
+
claimHoldResultSchema,
|
|
37
39
|
claimSchema,
|
|
38
|
-
claimStatusSchema,
|
|
39
40
|
type RejectClaimRequest,
|
|
40
41
|
rejectClaimRequestSchema,
|
|
41
42
|
} from "./schemas/claim";
|
|
@@ -47,8 +48,8 @@ import {
|
|
|
47
48
|
reviewSchema,
|
|
48
49
|
type SettlementListParams,
|
|
49
50
|
sellerCustomerInquirySchema,
|
|
50
|
-
settlementDetailSchema,
|
|
51
51
|
settlementSummarySchema,
|
|
52
|
+
settlementWithDetailsSchema,
|
|
52
53
|
type WebhookDeliveryListParams,
|
|
53
54
|
type WebhookRequest,
|
|
54
55
|
type WebhookTestRequest,
|
|
@@ -64,9 +65,11 @@ import {
|
|
|
64
65
|
import {
|
|
65
66
|
type CancelBySellerRequest,
|
|
66
67
|
cancelBySellerRequestSchema,
|
|
68
|
+
cancelBySellerResultSchema,
|
|
67
69
|
carrierSchema,
|
|
68
70
|
type DispatchRequest,
|
|
69
71
|
deliveryInfoSchema,
|
|
72
|
+
deliveryStatusSchema,
|
|
70
73
|
dispatchRequestSchema,
|
|
71
74
|
type HoldOrderItemRequest,
|
|
72
75
|
holdOrderItemRequestSchema,
|
|
@@ -75,6 +78,7 @@ import {
|
|
|
75
78
|
orderItemSchema,
|
|
76
79
|
orderSchema,
|
|
77
80
|
orderSummarySchema,
|
|
81
|
+
purchaseDecisionExtendResultSchema,
|
|
78
82
|
} from "./schemas/order";
|
|
79
83
|
import {
|
|
80
84
|
type PaymentListParams,
|
|
@@ -459,11 +463,7 @@ export function createStoreClient(options: StoreClientOptions) {
|
|
|
459
463
|
storeHttp.request(
|
|
460
464
|
"POST",
|
|
461
465
|
path`/order-items/${orderItemId}/cancel`,
|
|
462
|
-
|
|
463
|
-
orderItemId: z.string(),
|
|
464
|
-
refundAmount: z.number().int(),
|
|
465
|
-
refundedAt: z.string(),
|
|
466
|
-
}),
|
|
466
|
+
cancelBySellerResultSchema,
|
|
467
467
|
{ body: cancelBySellerRequestSchema.parse(body), headers: idempotency(idempotencyKey) },
|
|
468
468
|
),
|
|
469
469
|
updateMemo: (orderItemId: string, memo: string) =>
|
|
@@ -474,11 +474,7 @@ export function createStoreClient(options: StoreClientOptions) {
|
|
|
474
474
|
storeHttp.request(
|
|
475
475
|
"POST",
|
|
476
476
|
path`/order-items/${orderItemId}/purchase-decision/extend`,
|
|
477
|
-
|
|
478
|
-
orderItemId: z.string(),
|
|
479
|
-
autoDecisionDate: z.string(),
|
|
480
|
-
extendCount: z.number().int().max(2),
|
|
481
|
-
}),
|
|
477
|
+
purchaseDecisionExtendResultSchema,
|
|
482
478
|
),
|
|
483
479
|
dispatch: (orderItemId: string, body: DispatchRequest, idempotencyKey?: string) =>
|
|
484
480
|
storeHttp.request("POST", path`/order-items/${orderItemId}/dispatch`, deliveryInfoSchema, {
|
|
@@ -498,15 +494,7 @@ export function createStoreClient(options: StoreClientOptions) {
|
|
|
498
494
|
body: { carrierCode, trackingNumber },
|
|
499
495
|
}),
|
|
500
496
|
getDelivery: (orderItemId: string) =>
|
|
501
|
-
storeHttp.request(
|
|
502
|
-
"GET",
|
|
503
|
-
path`/order-items/${orderItemId}/delivery`,
|
|
504
|
-
deliveryInfoSchema.extend({
|
|
505
|
-
trackingEvents: z
|
|
506
|
-
.array(z.object({ status: z.string(), location: z.string(), occurredAt: z.string() }))
|
|
507
|
-
.optional(),
|
|
508
|
-
}),
|
|
509
|
-
),
|
|
497
|
+
storeHttp.request("GET", path`/order-items/${orderItemId}/delivery`, deliveryStatusSchema),
|
|
510
498
|
},
|
|
511
499
|
|
|
512
500
|
carriers: {
|
|
@@ -517,21 +505,7 @@ export function createStoreClient(options: StoreClientOptions) {
|
|
|
517
505
|
list: (params?: ClaimListParams) =>
|
|
518
506
|
storeHttp.request("GET", "/claims", pageSchema(claimSchema), { query: params as Query }),
|
|
519
507
|
get: (claimId: string) =>
|
|
520
|
-
storeHttp.request(
|
|
521
|
-
"GET",
|
|
522
|
-
path`/claims/${claimId}`,
|
|
523
|
-
claimSchema.extend({
|
|
524
|
-
histories: z
|
|
525
|
-
.array(
|
|
526
|
-
z.object({
|
|
527
|
-
status: claimStatusSchema,
|
|
528
|
-
actor: z.enum(["BUYER", "SELLER", "SYSTEM"]),
|
|
529
|
-
occurredAt: z.string(),
|
|
530
|
-
}),
|
|
531
|
-
)
|
|
532
|
-
.optional(),
|
|
533
|
-
}),
|
|
534
|
-
),
|
|
508
|
+
storeHttp.request("GET", path`/claims/${claimId}`, claimDetailSchema),
|
|
535
509
|
approve: (claimId: string, deductAmount?: number, idempotencyKey?: string) =>
|
|
536
510
|
storeHttp.request("POST", path`/claims/${claimId}/approve`, approveClaimResultSchema, {
|
|
537
511
|
body: deductAmount !== undefined ? { deductAmount } : {},
|
|
@@ -552,12 +526,9 @@ export function createStoreClient(options: StoreClientOptions) {
|
|
|
552
526
|
body: { carrierCode, trackingNumber },
|
|
553
527
|
}),
|
|
554
528
|
hold: (claimId: string, reason: string) =>
|
|
555
|
-
storeHttp.request(
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
z.object({ claimId: z.string(), holdExpiresAt: z.string() }),
|
|
559
|
-
{ body: { reason } },
|
|
560
|
-
),
|
|
529
|
+
storeHttp.request("POST", path`/claims/${claimId}/hold`, claimHoldResultSchema, {
|
|
530
|
+
body: { reason },
|
|
531
|
+
}),
|
|
561
532
|
releaseHold: (claimId: string) =>
|
|
562
533
|
storeHttp.requestVoid("DELETE", path`/claims/${claimId}/hold`),
|
|
563
534
|
},
|
|
@@ -614,12 +585,9 @@ export function createStoreClient(options: StoreClientOptions) {
|
|
|
614
585
|
}),
|
|
615
586
|
/** @deprecated `salesReport.get`을 쓴다. 기존 정산 레코드 조회만 유지된다 */
|
|
616
587
|
get: (settlementId: string, params?: PageParams) =>
|
|
617
|
-
storeHttp.request(
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
settlementSummarySchema.extend({ details: z.array(settlementDetailSchema).optional() }),
|
|
621
|
-
{ query: params as Query },
|
|
622
|
-
),
|
|
588
|
+
storeHttp.request("GET", path`/settlements/${settlementId}`, settlementWithDetailsSchema, {
|
|
589
|
+
query: params as Query,
|
|
590
|
+
}),
|
|
623
591
|
},
|
|
624
592
|
|
|
625
593
|
/**
|
package/src/schemas/category.ts
CHANGED
|
@@ -96,3 +96,39 @@ export type CategoryPatchRequest = z.infer<typeof categoryPatchRequestSchema>;
|
|
|
96
96
|
export const categoryDeleteStrategySchema = z.enum(["reparent", "cascade"]);
|
|
97
97
|
|
|
98
98
|
export type CategoryDeleteStrategy = z.infer<typeof categoryDeleteStrategySchema>;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* `GET /v1/categories` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열). 응답 형태가 쿼리로 갈린다:
|
|
102
|
+
* `q`가 있으면 검색 결과(`CategorySearchResult[]`), 아니면 `tree=true`일 때 트리(`CategoryTreeNode[]`),
|
|
103
|
+
* 둘 다 아니면 목록(`Category[]`)이다.
|
|
104
|
+
*/
|
|
105
|
+
export const categoryListQuerySchema = z.object({
|
|
106
|
+
parentId: z
|
|
107
|
+
.string()
|
|
108
|
+
.optional()
|
|
109
|
+
.describe("이 카테고리의 직계 자식만. 생략하면 최상위 카테고리. `flat=true`면 무시"),
|
|
110
|
+
flat: z
|
|
111
|
+
.enum(["true", "false"])
|
|
112
|
+
.optional()
|
|
113
|
+
.describe("`true`면 전체 카테고리를 깊이·순서대로 평탄화"),
|
|
114
|
+
tree: z
|
|
115
|
+
.enum(["true", "false"])
|
|
116
|
+
.optional()
|
|
117
|
+
.describe("`true`면 최상위부터 `children`을 채운 트리(`CategoryTreeNode[]`)를 돌려준다"),
|
|
118
|
+
q: z
|
|
119
|
+
.string()
|
|
120
|
+
.optional()
|
|
121
|
+
.describe(
|
|
122
|
+
"이름 검색(포함, 대소문자 무시). 주면 `fullPath`·`ancestors`가 붙은 검색 결과를 돌려준다",
|
|
123
|
+
),
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
/** `DELETE /v1/categories/{categoryId}` 쿼리 — OpenAPI 문서용 형태 */
|
|
127
|
+
export const categoryDeleteQuerySchema = z.object({
|
|
128
|
+
strategy: categoryDeleteStrategySchema
|
|
129
|
+
.optional()
|
|
130
|
+
.describe(
|
|
131
|
+
"하위 카테고리·연결 상품 처리 방식. 생략하면 둘 중 하나라도 있을 때 409 `CATEGORY_NOT_EMPTY`다. " +
|
|
132
|
+
"`reparent`는 직계 자식을 삭제할 카테고리의 부모로 옮기고, `cascade`는 서브트리를 삭제하고 연결 상품을 미분류로 둔다",
|
|
133
|
+
),
|
|
134
|
+
});
|
package/src/schemas/claim.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import type
|
|
2
|
+
import { type PageParams, pageQueryShape } from "./common";
|
|
3
3
|
|
|
4
4
|
export const claimTypeSchema = z.enum(["CANCEL", "RETURN", "EXCHANGE"]);
|
|
5
5
|
|
|
@@ -65,6 +65,36 @@ export interface ClaimListParams extends PageParams {
|
|
|
65
65
|
requestedTo?: string;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
/** `GET /v1/claims` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열) */
|
|
69
|
+
export const claimListQuerySchema = z.object({
|
|
70
|
+
type: claimTypeSchema.optional().describe("클레임 유형 필터"),
|
|
71
|
+
status: claimStatusSchema.optional().describe("클레임 상태 필터"),
|
|
72
|
+
orderItemId: z.string().optional().describe("주문상품 id 필터"),
|
|
73
|
+
requestedFrom: z.string().optional().describe("요청 시각 조회 시작 (ISO 8601, 포함)"),
|
|
74
|
+
requestedTo: z.string().optional().describe("요청 시각 조회 끝 (ISO 8601, 포함)"),
|
|
75
|
+
...pageQueryShape(),
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
/** `GET /v1/claims/{claimId}` 응답 — 클레임 + 상태 이력 */
|
|
79
|
+
export const claimDetailSchema = claimSchema.extend({
|
|
80
|
+
histories: z
|
|
81
|
+
.array(
|
|
82
|
+
z.object({
|
|
83
|
+
status: claimStatusSchema,
|
|
84
|
+
actor: z.enum(["BUYER", "SELLER", "SYSTEM"]),
|
|
85
|
+
occurredAt: z.string(),
|
|
86
|
+
}),
|
|
87
|
+
)
|
|
88
|
+
.optional(),
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
export type ClaimDetail = z.infer<typeof claimDetailSchema>;
|
|
92
|
+
|
|
93
|
+
/** `POST /v1/claims/{claimId}/hold` 응답 */
|
|
94
|
+
export const claimHoldResultSchema = z.object({ claimId: z.string(), holdExpiresAt: z.string() });
|
|
95
|
+
|
|
96
|
+
export type ClaimHoldResult = z.infer<typeof claimHoldResultSchema>;
|
|
97
|
+
|
|
68
98
|
export const rejectClaimRequestSchema = z.object({
|
|
69
99
|
reason: z.enum([
|
|
70
100
|
"USED_PRODUCT",
|