@sayren/store-sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -16,6 +16,270 @@ type TokenSource = string | null | undefined | (() => string | null | undefined)
16
16
  type Query = Record<string, string | number | boolean | undefined>;
17
17
  export declare function buildQuery(query?: Query): string;
18
18
  //#endregion
19
+ //#region src/schemas/analytics.d.ts
20
+ export declare const analyticsRangeQuerySchema: z.ZodObject<{
21
+ from: z.ZodString;
22
+ to: z.ZodString;
23
+ includeTest: z.ZodOptional<z.ZodEnum<{
24
+ true: "true";
25
+ false: "false";
26
+ }>>;
27
+ }, z.core.$strip>;
28
+ export type AnalyticsRangeParams = z.infer<typeof analyticsRangeQuerySchema>;
29
+ export declare const analyticsTotalsSchema: z.ZodObject<{
30
+ visitors: z.ZodNumber;
31
+ sessions: z.ZodNumber;
32
+ engagedSessions: z.ZodNumber;
33
+ pageViews: z.ZodNumber;
34
+ engagementSeconds: z.ZodNumber;
35
+ productViews: z.ZodNumber;
36
+ productViewSessions: z.ZodNumber;
37
+ addToCartSessions: z.ZodNumber;
38
+ beginCheckoutSessions: z.ZodNumber;
39
+ purchaseSessions: z.ZodNumber;
40
+ purchases: z.ZodNumber;
41
+ revenue: z.ZodNumber;
42
+ engagementRate: z.ZodNullable<z.ZodNumber>;
43
+ conversionRate: z.ZodNullable<z.ZodNumber>;
44
+ }, z.core.$strip>;
45
+ export type AnalyticsTotals = z.infer<typeof analyticsTotalsSchema>;
46
+ export declare const analyticsFunnelStepSchema: z.ZodObject<{
47
+ step: z.ZodEnum<{
48
+ SESSION: "SESSION";
49
+ PRODUCT_VIEW: "PRODUCT_VIEW";
50
+ ADD_TO_CART: "ADD_TO_CART";
51
+ BEGIN_CHECKOUT: "BEGIN_CHECKOUT";
52
+ PURCHASE: "PURCHASE";
53
+ }>;
54
+ sessions: z.ZodNumber;
55
+ rateFromPrevious: z.ZodNullable<z.ZodNumber>;
56
+ }, z.core.$strip>;
57
+ export type AnalyticsFunnelStep = z.infer<typeof analyticsFunnelStepSchema>;
58
+ export declare const analyticsOverviewSchema: z.ZodObject<{
59
+ summary: z.ZodObject<{
60
+ visitors: z.ZodNumber;
61
+ sessions: z.ZodNumber;
62
+ engagedSessions: z.ZodNumber;
63
+ pageViews: z.ZodNumber;
64
+ engagementSeconds: z.ZodNumber;
65
+ productViews: z.ZodNumber;
66
+ productViewSessions: z.ZodNumber;
67
+ addToCartSessions: z.ZodNumber;
68
+ beginCheckoutSessions: z.ZodNumber;
69
+ purchaseSessions: z.ZodNumber;
70
+ purchases: z.ZodNumber;
71
+ revenue: z.ZodNumber;
72
+ engagementRate: z.ZodNullable<z.ZodNumber>;
73
+ conversionRate: z.ZodNullable<z.ZodNumber>;
74
+ }, z.core.$strip>;
75
+ funnel: z.ZodArray<z.ZodObject<{
76
+ step: z.ZodEnum<{
77
+ SESSION: "SESSION";
78
+ PRODUCT_VIEW: "PRODUCT_VIEW";
79
+ ADD_TO_CART: "ADD_TO_CART";
80
+ BEGIN_CHECKOUT: "BEGIN_CHECKOUT";
81
+ PURCHASE: "PURCHASE";
82
+ }>;
83
+ sessions: z.ZodNumber;
84
+ rateFromPrevious: z.ZodNullable<z.ZodNumber>;
85
+ }, z.core.$strip>>;
86
+ rows: z.ZodArray<z.ZodObject<{
87
+ visitors: z.ZodNumber;
88
+ sessions: z.ZodNumber;
89
+ engagedSessions: z.ZodNumber;
90
+ pageViews: z.ZodNumber;
91
+ engagementSeconds: z.ZodNumber;
92
+ productViews: z.ZodNumber;
93
+ productViewSessions: z.ZodNumber;
94
+ addToCartSessions: z.ZodNumber;
95
+ beginCheckoutSessions: z.ZodNumber;
96
+ purchaseSessions: z.ZodNumber;
97
+ purchases: z.ZodNumber;
98
+ revenue: z.ZodNumber;
99
+ engagementRate: z.ZodNullable<z.ZodNumber>;
100
+ conversionRate: z.ZodNullable<z.ZodNumber>;
101
+ date: z.ZodString;
102
+ }, z.core.$strip>>;
103
+ from: z.ZodString;
104
+ to: z.ZodString;
105
+ timezone: z.ZodLiteral<"Asia/Seoul">;
106
+ currency: z.ZodLiteral<"KRW">;
107
+ includeTest: z.ZodBoolean;
108
+ lastComputedAt: z.ZodNullable<z.ZodString>;
109
+ }, z.core.$strip>;
110
+ export type AnalyticsOverview = z.infer<typeof analyticsOverviewSchema>;
111
+ export declare const analyticsProductSortSchema: z.ZodEnum<{
112
+ VIEWS: "VIEWS";
113
+ ADD_TO_CARTS: "ADD_TO_CARTS";
114
+ PURCHASES: "PURCHASES";
115
+ REVENUE: "REVENUE";
116
+ IMPRESSIONS: "IMPRESSIONS";
117
+ }>;
118
+ export type AnalyticsProductSort = z.infer<typeof analyticsProductSortSchema>;
119
+ export declare const analyticsProductsQuerySchema: z.ZodObject<{
120
+ from: z.ZodString;
121
+ to: z.ZodString;
122
+ includeTest: z.ZodOptional<z.ZodEnum<{
123
+ true: "true";
124
+ false: "false";
125
+ }>>;
126
+ sort: z.ZodOptional<z.ZodEnum<{
127
+ VIEWS: "VIEWS";
128
+ ADD_TO_CARTS: "ADD_TO_CARTS";
129
+ PURCHASES: "PURCHASES";
130
+ REVENUE: "REVENUE";
131
+ IMPRESSIONS: "IMPRESSIONS";
132
+ }>>;
133
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
134
+ }, z.core.$strip>;
135
+ export type AnalyticsProductsParams = z.infer<typeof analyticsProductsQuerySchema>;
136
+ export declare const analyticsProductRowSchema: z.ZodObject<{
137
+ productId: z.ZodString;
138
+ productName: z.ZodNullable<z.ZodString>;
139
+ impressions: z.ZodNumber;
140
+ views: z.ZodNumber;
141
+ viewSessions: z.ZodNumber;
142
+ addToCarts: z.ZodNumber;
143
+ purchases: z.ZodNumber;
144
+ quantity: z.ZodNumber;
145
+ revenue: z.ZodNumber;
146
+ purchaseRate: z.ZodNullable<z.ZodNumber>;
147
+ }, z.core.$strip>;
148
+ export type AnalyticsProductRow = z.infer<typeof analyticsProductRowSchema>;
149
+ export declare const analyticsProductsSchema: z.ZodObject<{
150
+ sort: z.ZodEnum<{
151
+ VIEWS: "VIEWS";
152
+ ADD_TO_CARTS: "ADD_TO_CARTS";
153
+ PURCHASES: "PURCHASES";
154
+ REVENUE: "REVENUE";
155
+ IMPRESSIONS: "IMPRESSIONS";
156
+ }>;
157
+ rows: z.ZodArray<z.ZodObject<{
158
+ productId: z.ZodString;
159
+ productName: z.ZodNullable<z.ZodString>;
160
+ impressions: z.ZodNumber;
161
+ views: z.ZodNumber;
162
+ viewSessions: z.ZodNumber;
163
+ addToCarts: z.ZodNumber;
164
+ purchases: z.ZodNumber;
165
+ quantity: z.ZodNumber;
166
+ revenue: z.ZodNumber;
167
+ purchaseRate: z.ZodNullable<z.ZodNumber>;
168
+ }, z.core.$strip>>;
169
+ from: z.ZodString;
170
+ to: z.ZodString;
171
+ timezone: z.ZodLiteral<"Asia/Seoul">;
172
+ currency: z.ZodLiteral<"KRW">;
173
+ includeTest: z.ZodBoolean;
174
+ lastComputedAt: z.ZodNullable<z.ZodString>;
175
+ }, z.core.$strip>;
176
+ export type AnalyticsProducts = z.infer<typeof analyticsProductsSchema>;
177
+ export declare const analyticsChannelSchema: z.ZodEnum<{
178
+ PAID: "PAID";
179
+ DIRECT: "DIRECT";
180
+ CAMPAIGN: "CAMPAIGN";
181
+ ORGANIC_SEARCH: "ORGANIC_SEARCH";
182
+ SOCIAL: "SOCIAL";
183
+ EMAIL: "EMAIL";
184
+ REFERRAL: "REFERRAL";
185
+ UNKNOWN: "UNKNOWN";
186
+ }>;
187
+ export type AnalyticsChannel = z.infer<typeof analyticsChannelSchema>;
188
+ export declare const analyticsSourceGroupBySchema: z.ZodEnum<{
189
+ CHANNEL: "CHANNEL";
190
+ SOURCE: "SOURCE";
191
+ CAMPAIGN: "CAMPAIGN";
192
+ DEVICE: "DEVICE";
193
+ }>;
194
+ export type AnalyticsSourceGroupBy = z.infer<typeof analyticsSourceGroupBySchema>;
195
+ export declare const analyticsSourcesQuerySchema: z.ZodObject<{
196
+ from: z.ZodString;
197
+ to: z.ZodString;
198
+ includeTest: z.ZodOptional<z.ZodEnum<{
199
+ true: "true";
200
+ false: "false";
201
+ }>>;
202
+ groupBy: z.ZodOptional<z.ZodEnum<{
203
+ CHANNEL: "CHANNEL";
204
+ SOURCE: "SOURCE";
205
+ CAMPAIGN: "CAMPAIGN";
206
+ DEVICE: "DEVICE";
207
+ }>>;
208
+ }, z.core.$strip>;
209
+ export type AnalyticsSourcesParams = z.infer<typeof analyticsSourcesQuerySchema>;
210
+ export declare const analyticsSourceRowSchema: z.ZodObject<{
211
+ channel: z.ZodNullable<z.ZodEnum<{
212
+ PAID: "PAID";
213
+ DIRECT: "DIRECT";
214
+ CAMPAIGN: "CAMPAIGN";
215
+ ORGANIC_SEARCH: "ORGANIC_SEARCH";
216
+ SOCIAL: "SOCIAL";
217
+ EMAIL: "EMAIL";
218
+ REFERRAL: "REFERRAL";
219
+ UNKNOWN: "UNKNOWN";
220
+ }>>;
221
+ source: z.ZodNullable<z.ZodString>;
222
+ medium: z.ZodNullable<z.ZodString>;
223
+ campaign: z.ZodNullable<z.ZodString>;
224
+ device: z.ZodNullable<z.ZodEnum<{
225
+ unknown: "unknown";
226
+ desktop: "desktop";
227
+ mobile: "mobile";
228
+ tablet: "tablet";
229
+ }>>;
230
+ sessions: z.ZodNumber;
231
+ visitors: z.ZodNumber;
232
+ engagedSessions: z.ZodNumber;
233
+ purchaseSessions: z.ZodNumber;
234
+ purchases: z.ZodNumber;
235
+ revenue: z.ZodNumber;
236
+ conversionRate: z.ZodNullable<z.ZodNumber>;
237
+ }, z.core.$strip>;
238
+ export type AnalyticsSourceRow = z.infer<typeof analyticsSourceRowSchema>;
239
+ export declare const analyticsSourcesSchema: z.ZodObject<{
240
+ groupBy: z.ZodEnum<{
241
+ CHANNEL: "CHANNEL";
242
+ SOURCE: "SOURCE";
243
+ CAMPAIGN: "CAMPAIGN";
244
+ DEVICE: "DEVICE";
245
+ }>;
246
+ rows: z.ZodArray<z.ZodObject<{
247
+ channel: z.ZodNullable<z.ZodEnum<{
248
+ PAID: "PAID";
249
+ DIRECT: "DIRECT";
250
+ CAMPAIGN: "CAMPAIGN";
251
+ ORGANIC_SEARCH: "ORGANIC_SEARCH";
252
+ SOCIAL: "SOCIAL";
253
+ EMAIL: "EMAIL";
254
+ REFERRAL: "REFERRAL";
255
+ UNKNOWN: "UNKNOWN";
256
+ }>>;
257
+ source: z.ZodNullable<z.ZodString>;
258
+ medium: z.ZodNullable<z.ZodString>;
259
+ campaign: z.ZodNullable<z.ZodString>;
260
+ device: z.ZodNullable<z.ZodEnum<{
261
+ unknown: "unknown";
262
+ desktop: "desktop";
263
+ mobile: "mobile";
264
+ tablet: "tablet";
265
+ }>>;
266
+ sessions: z.ZodNumber;
267
+ visitors: z.ZodNumber;
268
+ engagedSessions: z.ZodNumber;
269
+ purchaseSessions: z.ZodNumber;
270
+ purchases: z.ZodNumber;
271
+ revenue: z.ZodNumber;
272
+ conversionRate: z.ZodNullable<z.ZodNumber>;
273
+ }, z.core.$strip>>;
274
+ from: z.ZodString;
275
+ to: z.ZodString;
276
+ timezone: z.ZodLiteral<"Asia/Seoul">;
277
+ currency: z.ZodLiteral<"KRW">;
278
+ includeTest: z.ZodBoolean;
279
+ lastComputedAt: z.ZodNullable<z.ZodString>;
280
+ }, z.core.$strip>;
281
+ export type AnalyticsSources = z.infer<typeof analyticsSourcesSchema>;
282
+ //#endregion
19
283
  //#region src/schemas/api-client.d.ts
20
284
  /**
21
285
  * 앱(OAuth 클라이언트) 관리 — `/v1/store/api-clients` (auth-spec 부록 B-13).
@@ -543,6 +807,30 @@ export declare const categoryDeleteStrategySchema: z.ZodEnum<{
543
807
  cascade: "cascade";
544
808
  }>;
545
809
  export type CategoryDeleteStrategy = z.infer<typeof categoryDeleteStrategySchema>;
810
+ /**
811
+ * `GET /v1/categories` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열). 응답 형태가 쿼리로 갈린다:
812
+ * `q`가 있으면 검색 결과(`CategorySearchResult[]`), 아니면 `tree=true`일 때 트리(`CategoryTreeNode[]`),
813
+ * 둘 다 아니면 목록(`Category[]`)이다.
814
+ */
815
+ export declare const categoryListQuerySchema: z.ZodObject<{
816
+ parentId: z.ZodOptional<z.ZodString>;
817
+ flat: z.ZodOptional<z.ZodEnum<{
818
+ true: "true";
819
+ false: "false";
820
+ }>>;
821
+ tree: z.ZodOptional<z.ZodEnum<{
822
+ true: "true";
823
+ false: "false";
824
+ }>>;
825
+ q: z.ZodOptional<z.ZodString>;
826
+ }, z.core.$strip>;
827
+ /** `DELETE /v1/categories/{categoryId}` 쿼리 — OpenAPI 문서용 형태 */
828
+ export declare const categoryDeleteQuerySchema: z.ZodObject<{
829
+ strategy: z.ZodOptional<z.ZodEnum<{
830
+ reparent: "reparent";
831
+ cascade: "cascade";
832
+ }>>;
833
+ }, z.core.$strip>;
546
834
  //#endregion
547
835
  //#region src/schemas/common.d.ts
548
836
  export declare const pageInfoSchema: z.ZodObject<{
@@ -559,6 +847,17 @@ export declare function pageSchema<T extends z.ZodType>(item: T): z.ZodObject<{
559
847
  totalPages: z.ZodNumber;
560
848
  contents: z.ZodArray<T>;
561
849
  }, z.core.$strip>;
850
+ /**
851
+ * 목록 쿼리의 `page`·`size` — OpenAPI 문서용 형태(값은 쿼리 문자열). 서버는 숫자가 아니거나 범위를 벗어난
852
+ * 값을 기본값·상한으로 보정한다.
853
+ */
854
+ export declare function pageQueryShape(options?: {
855
+ defaultSize?: number;
856
+ maxSize?: number;
857
+ }): {
858
+ page: z.ZodOptional<z.ZodString>;
859
+ size: z.ZodOptional<z.ZodString>;
860
+ };
562
861
  export interface PageParams {
563
862
  page?: number;
564
863
  size?: number;
@@ -686,6 +985,109 @@ export interface ClaimListParams extends PageParams {
686
985
  requestedFrom?: string;
687
986
  requestedTo?: string;
688
987
  }
988
+ /** `GET /v1/claims` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열) */
989
+ export declare const claimListQuerySchema: z.ZodObject<{
990
+ page: z.ZodOptional<z.ZodString>;
991
+ size: z.ZodOptional<z.ZodString>;
992
+ type: z.ZodOptional<z.ZodEnum<{
993
+ RETURN: "RETURN";
994
+ EXCHANGE: "EXCHANGE";
995
+ CANCEL: "CANCEL";
996
+ }>>;
997
+ status: z.ZodOptional<z.ZodEnum<{
998
+ REQUESTED: "REQUESTED";
999
+ HELD: "HELD";
1000
+ COLLECTING: "COLLECTING";
1001
+ COLLECTED: "COLLECTED";
1002
+ REDELIVERING: "REDELIVERING";
1003
+ APPROVED: "APPROVED";
1004
+ REJECTED: "REJECTED";
1005
+ COMPLETED: "COMPLETED";
1006
+ WITHDRAWN: "WITHDRAWN";
1007
+ }>>;
1008
+ orderItemId: z.ZodOptional<z.ZodString>;
1009
+ requestedFrom: z.ZodOptional<z.ZodString>;
1010
+ requestedTo: z.ZodOptional<z.ZodString>;
1011
+ }, z.core.$strip>;
1012
+ /** `GET /v1/claims/{claimId}` 응답 — 클레임 + 상태 이력 */
1013
+ export declare const claimDetailSchema: z.ZodObject<{
1014
+ claimId: z.ZodString;
1015
+ type: z.ZodEnum<{
1016
+ RETURN: "RETURN";
1017
+ EXCHANGE: "EXCHANGE";
1018
+ CANCEL: "CANCEL";
1019
+ }>;
1020
+ status: z.ZodEnum<{
1021
+ REQUESTED: "REQUESTED";
1022
+ HELD: "HELD";
1023
+ COLLECTING: "COLLECTING";
1024
+ COLLECTED: "COLLECTED";
1025
+ REDELIVERING: "REDELIVERING";
1026
+ APPROVED: "APPROVED";
1027
+ REJECTED: "REJECTED";
1028
+ COMPLETED: "COMPLETED";
1029
+ WITHDRAWN: "WITHDRAWN";
1030
+ }>;
1031
+ orderId: z.ZodString;
1032
+ orderItemId: z.ZodString;
1033
+ productName: z.ZodString;
1034
+ quantity: z.ZodNumber;
1035
+ reason: z.ZodEnum<{
1036
+ CHANGE_OF_MIND: "CHANGE_OF_MIND";
1037
+ WRONG_ORDER: "WRONG_ORDER";
1038
+ DEFECTIVE: "DEFECTIVE";
1039
+ WRONG_DELIVERY: "WRONG_DELIVERY";
1040
+ DIFFERENT_FROM_PAGE: "DIFFERENT_FROM_PAGE";
1041
+ DELAY: "DELAY";
1042
+ }>;
1043
+ reasonDetail: z.ZodNullable<z.ZodString>;
1044
+ responsibility: z.ZodEnum<{
1045
+ BUYER: "BUYER";
1046
+ SELLER: "SELLER";
1047
+ }>;
1048
+ claimDeliveryFee: z.ZodNumber;
1049
+ expectedRefundAmount: z.ZodNullable<z.ZodNumber>;
1050
+ exchangeOption: z.ZodNullable<z.ZodObject<{
1051
+ optionId: z.ZodString;
1052
+ optionName: z.ZodString;
1053
+ }, z.core.$strip>>;
1054
+ collect: z.ZodNullable<z.ZodObject<{
1055
+ method: z.ZodEnum<{
1056
+ SELLER_PICKUP: "SELLER_PICKUP";
1057
+ BUYER_SEND: "BUYER_SEND";
1058
+ }>;
1059
+ carrierCode: z.ZodNullable<z.ZodString>;
1060
+ trackingNumber: z.ZodNullable<z.ZodString>;
1061
+ }, z.core.$strip>>;
1062
+ requestedAt: z.ZodString;
1063
+ completedAt: z.ZodNullable<z.ZodString>;
1064
+ histories: z.ZodOptional<z.ZodArray<z.ZodObject<{
1065
+ status: z.ZodEnum<{
1066
+ REQUESTED: "REQUESTED";
1067
+ HELD: "HELD";
1068
+ COLLECTING: "COLLECTING";
1069
+ COLLECTED: "COLLECTED";
1070
+ REDELIVERING: "REDELIVERING";
1071
+ APPROVED: "APPROVED";
1072
+ REJECTED: "REJECTED";
1073
+ COMPLETED: "COMPLETED";
1074
+ WITHDRAWN: "WITHDRAWN";
1075
+ }>;
1076
+ actor: z.ZodEnum<{
1077
+ BUYER: "BUYER";
1078
+ SELLER: "SELLER";
1079
+ SYSTEM: "SYSTEM";
1080
+ }>;
1081
+ occurredAt: z.ZodString;
1082
+ }, z.core.$strip>>>;
1083
+ }, z.core.$strip>;
1084
+ export type ClaimDetail = z.infer<typeof claimDetailSchema>;
1085
+ /** `POST /v1/claims/{claimId}/hold` 응답 */
1086
+ export declare const claimHoldResultSchema: z.ZodObject<{
1087
+ claimId: z.ZodString;
1088
+ holdExpiresAt: z.ZodString;
1089
+ }, z.core.$strip>;
1090
+ export type ClaimHoldResult = z.infer<typeof claimHoldResultSchema>;
689
1091
  export declare const rejectClaimRequestSchema: z.ZodObject<{
690
1092
  reason: z.ZodEnum<{
691
1093
  ETC: "ETC";
@@ -762,6 +1164,34 @@ export declare const sellerCustomerInquirySchema: z.ZodObject<{
762
1164
  createdAt: z.ZodString;
763
1165
  }, z.core.$strip>;
764
1166
  export type SellerCustomerInquiry = z.infer<typeof sellerCustomerInquirySchema>;
1167
+ /** `GET /v1/inquiries` 쿼리(상품 문의) — OpenAPI 문서용 형태(값은 쿼리 문자열). 최신순이다 */
1168
+ export declare const inquiryListQuerySchema: z.ZodObject<{
1169
+ page: z.ZodOptional<z.ZodString>;
1170
+ size: z.ZodOptional<z.ZodString>;
1171
+ answered: z.ZodOptional<z.ZodEnum<{
1172
+ true: "true";
1173
+ false: "false";
1174
+ }>>;
1175
+ productId: z.ZodOptional<z.ZodString>;
1176
+ from: z.ZodOptional<z.ZodString>;
1177
+ }, z.core.$strip>;
1178
+ /** `GET /v1/customer-inquiries` 쿼리(1:1 문의) — OpenAPI 문서용 형태(값은 쿼리 문자열). 최신순이다 */
1179
+ export declare const customerInquiryListQuerySchema: z.ZodObject<{
1180
+ page: z.ZodOptional<z.ZodString>;
1181
+ size: z.ZodOptional<z.ZodString>;
1182
+ answered: z.ZodOptional<z.ZodEnum<{
1183
+ true: "true";
1184
+ false: "false";
1185
+ }>>;
1186
+ category: z.ZodOptional<z.ZodEnum<{
1187
+ ETC: "ETC";
1188
+ DELIVERY: "DELIVERY";
1189
+ RETURN: "RETURN";
1190
+ EXCHANGE: "EXCHANGE";
1191
+ PAYMENT: "PAYMENT";
1192
+ }>>;
1193
+ from: z.ZodOptional<z.ZodString>;
1194
+ }, z.core.$strip>;
765
1195
  export declare const settlementStatusSchema: z.ZodEnum<{
766
1196
  PAID: "PAID";
767
1197
  HELD: "HELD";
@@ -802,6 +1232,57 @@ export declare const settlementDetailSchema: z.ZodObject<{
802
1232
  purchaseDecidedAt: z.ZodNullable<z.ZodString>;
803
1233
  }, z.core.$strip>;
804
1234
  export type SettlementDetail = z.infer<typeof settlementDetailSchema>;
1235
+ /** `GET /v1/settlements/{settlementId}` 응답 — 정산 요약 + 상세 내역(`size`건까지) */
1236
+ export declare const settlementWithDetailsSchema: z.ZodObject<{
1237
+ settlementId: z.ZodString;
1238
+ settlementDate: z.ZodString;
1239
+ payoutDate: z.ZodNullable<z.ZodString>;
1240
+ status: z.ZodEnum<{
1241
+ PAID: "PAID";
1242
+ HELD: "HELD";
1243
+ SCHEDULED: "SCHEDULED";
1244
+ }>;
1245
+ totalPaymentAmount: z.ZodNumber;
1246
+ totalCommission: z.ZodNumber;
1247
+ totalDeliveryFee: z.ZodNumber;
1248
+ adjustmentAmount: z.ZodNumber;
1249
+ settlementAmount: z.ZodNumber;
1250
+ itemCount: z.ZodNumber;
1251
+ details: z.ZodOptional<z.ZodArray<z.ZodObject<{
1252
+ orderItemId: z.ZodString;
1253
+ productName: z.ZodString;
1254
+ settlementType: z.ZodEnum<{
1255
+ SALE: "SALE";
1256
+ REFUND_DEDUCTION: "REFUND_DEDUCTION";
1257
+ ADJUSTMENT: "ADJUSTMENT";
1258
+ }>;
1259
+ paymentAmount: z.ZodNumber;
1260
+ salesCommission: z.ZodNumber;
1261
+ paymentCommission: z.ZodNumber;
1262
+ commissionRate: z.ZodNumber;
1263
+ deliveryFee: z.ZodNumber;
1264
+ settlementAmount: z.ZodNumber;
1265
+ purchaseDecidedAt: z.ZodNullable<z.ZodString>;
1266
+ }, z.core.$strip>>>;
1267
+ }, z.core.$strip>;
1268
+ export type SettlementWithDetails = z.infer<typeof settlementWithDetailsSchema>;
1269
+ /** `GET /v1/settlements` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열). 정산일 최신순이다 */
1270
+ export declare const settlementListQuerySchema: z.ZodObject<{
1271
+ page: z.ZodOptional<z.ZodString>;
1272
+ size: z.ZodOptional<z.ZodString>;
1273
+ from: z.ZodString;
1274
+ to: z.ZodOptional<z.ZodString>;
1275
+ status: z.ZodOptional<z.ZodEnum<{
1276
+ PAID: "PAID";
1277
+ HELD: "HELD";
1278
+ SCHEDULED: "SCHEDULED";
1279
+ }>>;
1280
+ }, z.core.$strip>;
1281
+ /** `GET /v1/settlements/{settlementId}` 쿼리 — `size`는 돌려줄 상세 내역 건수다(`page`는 무시) */
1282
+ export declare const settlementDetailQuerySchema: z.ZodObject<{
1283
+ page: z.ZodOptional<z.ZodString>;
1284
+ size: z.ZodOptional<z.ZodString>;
1285
+ }, z.core.$strip>;
805
1286
  export interface SettlementListParams extends PageParams {
806
1287
  from: string;
807
1288
  to?: string;
@@ -1034,14 +1515,55 @@ export declare const reviewSchema: z.ZodObject<{
1034
1515
  createdAt: z.ZodString;
1035
1516
  }, z.core.$strip>;
1036
1517
  export type Review = z.infer<typeof reviewSchema>;
1518
+ export declare const reviewSortSchema: z.ZodEnum<{
1519
+ "createdAt.desc": "createdAt.desc";
1520
+ "createdAt.asc": "createdAt.asc";
1521
+ "rating.asc": "rating.asc";
1522
+ "rating.desc": "rating.desc";
1523
+ }>;
1524
+ export type ReviewSort = z.infer<typeof reviewSortSchema>;
1037
1525
  export interface ReviewListParams extends PageParams {
1038
1526
  productId?: string;
1039
1527
  rating?: number;
1040
1528
  replied?: boolean;
1041
1529
  hasImage?: boolean;
1042
1530
  from?: string;
1043
- sort?: "createdAt.desc" | "createdAt.asc" | "rating.asc" | "rating.desc";
1531
+ sort?: ReviewSort;
1044
1532
  }
1533
+ /** `GET /v1/reviews` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열) */
1534
+ export declare const reviewListQuerySchema: z.ZodObject<{
1535
+ page: z.ZodOptional<z.ZodString>;
1536
+ size: z.ZodOptional<z.ZodString>;
1537
+ productId: z.ZodOptional<z.ZodString>;
1538
+ rating: z.ZodOptional<z.ZodEnum<{
1539
+ 1: "1";
1540
+ 2: "2";
1541
+ 3: "3";
1542
+ 4: "4";
1543
+ 5: "5";
1544
+ }>>;
1545
+ replied: z.ZodOptional<z.ZodEnum<{
1546
+ true: "true";
1547
+ false: "false";
1548
+ }>>;
1549
+ hasImage: z.ZodOptional<z.ZodEnum<{
1550
+ true: "true";
1551
+ false: "false";
1552
+ }>>;
1553
+ from: z.ZodOptional<z.ZodString>;
1554
+ sort: z.ZodOptional<z.ZodEnum<{
1555
+ "createdAt.desc": "createdAt.desc";
1556
+ "createdAt.asc": "createdAt.asc";
1557
+ "rating.asc": "rating.asc";
1558
+ "rating.desc": "rating.desc";
1559
+ }>>;
1560
+ }, z.core.$strip>;
1561
+ /** `POST /v1/reviews/{reviewId}/report` 응답(202) — 신고 접수 */
1562
+ export declare const reviewReportResultSchema: z.ZodObject<{
1563
+ reviewId: z.ZodString;
1564
+ status: z.ZodLiteral<"PENDING_REVIEW">;
1565
+ }, z.core.$strip>;
1566
+ export type ReviewReportResult = z.infer<typeof reviewReportResultSchema>;
1045
1567
  //#endregion
1046
1568
  //#region src/schemas/order.d.ts
1047
1569
  export declare const orderSummarySchema: z.ZodObject<{
@@ -1394,6 +1916,40 @@ export declare const deliveryInfoSchema: z.ZodObject<{
1394
1916
  deliveredAt: z.ZodNullable<z.ZodString>;
1395
1917
  }, z.core.$strip>;
1396
1918
  export type DeliveryInfo = z.infer<typeof deliveryInfoSchema>;
1919
+ /** `GET /v1/order-items/{orderItemId}/delivery` 응답 — 배송 정보 + 배송 추적 이벤트 */
1920
+ export declare const deliveryStatusSchema: z.ZodObject<{
1921
+ orderItemId: z.ZodString;
1922
+ deliveryMethod: z.ZodEnum<{
1923
+ COURIER: "COURIER";
1924
+ DIRECT: "DIRECT";
1925
+ QUICK: "QUICK";
1926
+ NOTHING: "NOTHING";
1927
+ }>;
1928
+ carrierCode: z.ZodNullable<z.ZodString>;
1929
+ carrierName: z.ZodNullable<z.ZodString>;
1930
+ trackingNumber: z.ZodNullable<z.ZodString>;
1931
+ trackingUrl: z.ZodNullable<z.ZodURL>;
1932
+ status: z.ZodEnum<{
1933
+ DISPATCHED: "DISPATCHED";
1934
+ DELIVERING: "DELIVERING";
1935
+ DELIVERED: "DELIVERED";
1936
+ }>;
1937
+ dispatchedAt: z.ZodString;
1938
+ deliveredAt: z.ZodNullable<z.ZodString>;
1939
+ trackingEvents: z.ZodOptional<z.ZodArray<z.ZodObject<{
1940
+ status: z.ZodString;
1941
+ location: z.ZodString;
1942
+ occurredAt: z.ZodString;
1943
+ }, z.core.$strip>>>;
1944
+ }, z.core.$strip>;
1945
+ export type DeliveryStatus = z.infer<typeof deliveryStatusSchema>;
1946
+ /** `PUT /v1/order-items/{orderItemId}/dispatch/tracking` 응답 — 바뀐 송장 */
1947
+ export declare const trackingUpdateResultSchema: z.ZodObject<{
1948
+ orderItemId: z.ZodString;
1949
+ carrierCode: z.ZodString;
1950
+ trackingNumber: z.ZodString;
1951
+ }, z.core.$strip>;
1952
+ export type TrackingUpdateResult = z.infer<typeof trackingUpdateResultSchema>;
1397
1953
  export declare const carrierSchema: z.ZodObject<{
1398
1954
  carrierCode: z.ZodString;
1399
1955
  name: z.ZodString;
@@ -1421,6 +1977,37 @@ export declare const cancelBySellerRequestSchema: z.ZodObject<{
1421
1977
  detail: z.ZodOptional<z.ZodString>;
1422
1978
  }, z.core.$strip>;
1423
1979
  export type CancelBySellerRequest = z.infer<typeof cancelBySellerRequestSchema>;
1980
+ /** `POST /v1/order-items/{orderItemId}/cancel` 응답 — 셀러 직권취소 환불 결과 */
1981
+ export declare const cancelBySellerResultSchema: z.ZodObject<{
1982
+ orderItemId: z.ZodString;
1983
+ refundAmount: z.ZodNumber;
1984
+ refundedAt: z.ZodString;
1985
+ }, z.core.$strip>;
1986
+ export type CancelBySellerResult = z.infer<typeof cancelBySellerResultSchema>;
1987
+ /** `PUT /v1/order-items/{orderItemId}/memo` 응답 — 빈 문자열로 저장하면 메모가 지워져 `null`이다 */
1988
+ export declare const orderItemMemoResultSchema: z.ZodObject<{
1989
+ orderItemId: z.ZodString;
1990
+ sellerMemo: z.ZodNullable<z.ZodString>;
1991
+ }, z.core.$strip>;
1992
+ export type OrderItemMemoResult = z.infer<typeof orderItemMemoResultSchema>;
1993
+ /** `POST /v1/order-items/{orderItemId}/purchase-decision/request` 응답 */
1994
+ export declare const purchaseDecisionRequestResultSchema: z.ZodObject<{
1995
+ orderItemId: z.ZodString;
1996
+ requestedAt: z.ZodString;
1997
+ }, z.core.$strip>;
1998
+ export type PurchaseDecisionRequestResult = z.infer<typeof purchaseDecisionRequestResultSchema>;
1999
+ /** `POST /v1/order-items/{orderItemId}/purchase-decision/extend` 응답 — 연장은 최대 2회 */
2000
+ export declare const purchaseDecisionExtendResultSchema: z.ZodObject<{
2001
+ orderItemId: z.ZodString;
2002
+ autoDecisionDate: z.ZodString;
2003
+ extendCount: z.ZodNumber;
2004
+ }, z.core.$strip>;
2005
+ export type PurchaseDecisionExtendResult = z.infer<typeof purchaseDecisionExtendResultSchema>;
2006
+ /**
2007
+ * `GET /v1/orders/{orderId}/address-change-requests` 응답 — 배송지 변경 요청 플로우는 아직 제공하지 않아
2008
+ * 현재는 항상 빈 배열이다
2009
+ */
2010
+ export declare const addressChangeRequestListSchema: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1424
2011
  //#endregion
1425
2012
  //#region src/schemas/payment.d.ts
1426
2013
  /**
@@ -2652,7 +3239,14 @@ export declare const productPatchRequestSchema: z.ZodObject<{
2652
3239
  deliveryFee: z.ZodOptional<z.ZodNumber>;
2653
3240
  }, z.core.$strip>;
2654
3241
  export type ProductPatchRequest = z.infer<typeof productPatchRequestSchema>;
2655
- export type ProductSort = "createdAt.desc" | "createdAt.asc" | "salePrice.asc" | "salePrice.desc" | "updatedAt.desc";
3242
+ export declare const productSortSchema: z.ZodEnum<{
3243
+ "createdAt.desc": "createdAt.desc";
3244
+ "createdAt.asc": "createdAt.asc";
3245
+ "salePrice.asc": "salePrice.asc";
3246
+ "salePrice.desc": "salePrice.desc";
3247
+ "updatedAt.desc": "updatedAt.desc";
3248
+ }>;
3249
+ export type ProductSort = z.infer<typeof productSortSchema>;
2656
3250
  export interface ProductListParams extends PageParams {
2657
3251
  status?: ProductStatus;
2658
3252
  categoryId?: string;
@@ -2660,6 +3254,36 @@ export interface ProductListParams extends PageParams {
2660
3254
  sellerCode?: string;
2661
3255
  sort?: ProductSort;
2662
3256
  }
3257
+ /** `GET /v1/products` 쿼리 — OpenAPI 문서용 형태(값은 쿼리 문자열) */
3258
+ export declare const productListQuerySchema: z.ZodObject<{
3259
+ page: z.ZodOptional<z.ZodString>;
3260
+ size: z.ZodOptional<z.ZodString>;
3261
+ status: z.ZodOptional<z.ZodEnum<{
3262
+ SALE: "SALE";
3263
+ SUSPENDED: "SUSPENDED";
3264
+ OUT_OF_STOCK: "OUT_OF_STOCK";
3265
+ CLOSED: "CLOSED";
3266
+ }>>;
3267
+ categoryId: z.ZodOptional<z.ZodString>;
3268
+ keyword: z.ZodOptional<z.ZodString>;
3269
+ sellerCode: z.ZodOptional<z.ZodString>;
3270
+ sort: z.ZodOptional<z.ZodEnum<{
3271
+ "createdAt.desc": "createdAt.desc";
3272
+ "createdAt.asc": "createdAt.asc";
3273
+ "salePrice.asc": "salePrice.asc";
3274
+ "salePrice.desc": "salePrice.desc";
3275
+ "updatedAt.desc": "updatedAt.desc";
3276
+ }>>;
3277
+ }, z.core.$strip>;
3278
+ /** `POST /v1/product-images` 응답 — 업로드된 이미지의 CDN 주소 */
3279
+ export declare const productImageUploadResultSchema: z.ZodObject<{
3280
+ images: z.ZodArray<z.ZodObject<{
3281
+ url: z.ZodURL;
3282
+ width: z.ZodNumber;
3283
+ height: z.ZodNumber;
3284
+ }, z.core.$strip>>;
3285
+ }, z.core.$strip>;
3286
+ export type ProductImageUploadResult = z.infer<typeof productImageUploadResultSchema>;
2663
3287
  export declare const discountSchema: z.ZodObject<{
2664
3288
  productId: z.ZodString;
2665
3289
  discountType: z.ZodEnum<{
@@ -2744,11 +3368,36 @@ export declare const invitationSchema: z.ZodObject<{
2744
3368
  createdAt: z.ZodString;
2745
3369
  }, z.core.$strip>;
2746
3370
  export type Invitation = z.infer<typeof invitationSchema>;
3371
+ /** `GET /v1/store/invitations` 쿼리 — OpenAPI 문서용 형태 */
3372
+ export declare const invitationListQuerySchema: z.ZodObject<{
3373
+ status: z.ZodOptional<z.ZodEnum<{
3374
+ PENDING: "PENDING";
3375
+ CANCELED: "CANCELED";
3376
+ ACCEPTED: "ACCEPTED";
3377
+ EXPIRED: "EXPIRED";
3378
+ }>>;
3379
+ }, z.core.$strip>;
3380
+ /** `PATCH /v1/store/members/{userId}` 응답 — 바뀐 역할 */
3381
+ export declare const storeMemberRoleUpdatedSchema: z.ZodObject<{
3382
+ userId: z.ZodString;
3383
+ role: z.ZodEnum<{
3384
+ ADMIN: "ADMIN";
3385
+ STAFF: "STAFF";
3386
+ }>;
3387
+ }, z.core.$strip>;
3388
+ export type StoreMemberRoleUpdated = z.infer<typeof storeMemberRoleUpdatedSchema>;
2747
3389
  export declare const addressTypeSchema: z.ZodEnum<{
2748
3390
  RETURN: "RETURN";
2749
3391
  SHIPPING: "SHIPPING";
2750
3392
  }>;
2751
3393
  export type AddressType = z.infer<typeof addressTypeSchema>;
3394
+ /** `GET /v1/seller-addresses` 쿼리 — OpenAPI 문서용 형태. 기본 주소 우선, 그다음 등록순이다 */
3395
+ export declare const sellerAddressListQuerySchema: z.ZodObject<{
3396
+ type: z.ZodOptional<z.ZodEnum<{
3397
+ RETURN: "RETURN";
3398
+ SHIPPING: "SHIPPING";
3399
+ }>>;
3400
+ }, z.core.$strip>;
2752
3401
  export declare const sellerAddressSchema: z.ZodObject<{
2753
3402
  addressId: z.ZodString;
2754
3403
  type: z.ZodEnum<{
@@ -3933,6 +4582,106 @@ export declare function createStoreClient(options: StoreClientOptions): {
3933
4582
  }[];
3934
4583
  }>;
3935
4584
  };
4585
+ /**
4586
+ * 방문 분석 — 스코프 `analytics:r`. 스토어프런트가 `@sayren/storefront-sdk`로 수집한 이벤트를 Asia/Seoul 날짜별로
4587
+ * 집계한 값이다. 집계는 주기적으로 갱신되고 응답 `lastComputedAt`이 마지막 집계 시각이다. 봇 세션은 빠진다.
4588
+ * 기간은 양끝 포함 최대 92일이고, 테스트 결제 구매는 `includeTest: "true"`일 때만 포함한다.
4589
+ */
4590
+ analytics: {
4591
+ /** `GET /v1/analytics/overview` — 합계·세션 퍼널·날짜별 값 */
4592
+ overview: (params: AnalyticsRangeParams) => Promise<{
4593
+ summary: {
4594
+ visitors: number;
4595
+ sessions: number;
4596
+ engagedSessions: number;
4597
+ pageViews: number;
4598
+ engagementSeconds: number;
4599
+ productViews: number;
4600
+ productViewSessions: number;
4601
+ addToCartSessions: number;
4602
+ beginCheckoutSessions: number;
4603
+ purchaseSessions: number;
4604
+ purchases: number;
4605
+ revenue: number;
4606
+ engagementRate: number | null;
4607
+ conversionRate: number | null;
4608
+ };
4609
+ funnel: {
4610
+ step: "SESSION" | "PRODUCT_VIEW" | "ADD_TO_CART" | "BEGIN_CHECKOUT" | "PURCHASE";
4611
+ sessions: number;
4612
+ rateFromPrevious: number | null;
4613
+ }[];
4614
+ rows: {
4615
+ visitors: number;
4616
+ sessions: number;
4617
+ engagedSessions: number;
4618
+ pageViews: number;
4619
+ engagementSeconds: number;
4620
+ productViews: number;
4621
+ productViewSessions: number;
4622
+ addToCartSessions: number;
4623
+ beginCheckoutSessions: number;
4624
+ purchaseSessions: number;
4625
+ purchases: number;
4626
+ revenue: number;
4627
+ engagementRate: number | null;
4628
+ conversionRate: number | null;
4629
+ date: string;
4630
+ }[];
4631
+ from: string;
4632
+ to: string;
4633
+ timezone: "Asia/Seoul";
4634
+ currency: "KRW";
4635
+ includeTest: boolean;
4636
+ lastComputedAt: string | null;
4637
+ }>;
4638
+ /** `GET /v1/analytics/products` — 상품별 노출·조회·장바구니·구매 */
4639
+ products: (params: AnalyticsProductsParams) => Promise<{
4640
+ sort: "VIEWS" | "ADD_TO_CARTS" | "PURCHASES" | "REVENUE" | "IMPRESSIONS";
4641
+ rows: {
4642
+ productId: string;
4643
+ productName: string | null;
4644
+ impressions: number;
4645
+ views: number;
4646
+ viewSessions: number;
4647
+ addToCarts: number;
4648
+ purchases: number;
4649
+ quantity: number;
4650
+ revenue: number;
4651
+ purchaseRate: number | null;
4652
+ }[];
4653
+ from: string;
4654
+ to: string;
4655
+ timezone: "Asia/Seoul";
4656
+ currency: "KRW";
4657
+ includeTest: boolean;
4658
+ lastComputedAt: string | null;
4659
+ }>;
4660
+ /** `GET /v1/analytics/sources` — 채널·소스·캠페인·기기별 세션과 구매 */
4661
+ sources: (params: AnalyticsSourcesParams) => Promise<{
4662
+ groupBy: "CHANNEL" | "SOURCE" | "CAMPAIGN" | "DEVICE";
4663
+ rows: {
4664
+ channel: "PAID" | "DIRECT" | "CAMPAIGN" | "ORGANIC_SEARCH" | "SOCIAL" | "EMAIL" | "REFERRAL" | "UNKNOWN" | null;
4665
+ source: string | null;
4666
+ medium: string | null;
4667
+ campaign: string | null;
4668
+ device: "unknown" | "desktop" | "mobile" | "tablet" | null;
4669
+ sessions: number;
4670
+ visitors: number;
4671
+ engagedSessions: number;
4672
+ purchaseSessions: number;
4673
+ purchases: number;
4674
+ revenue: number;
4675
+ conversionRate: number | null;
4676
+ }[];
4677
+ from: string;
4678
+ to: string;
4679
+ timezone: "Asia/Seoul";
4680
+ currency: "KRW";
4681
+ includeTest: boolean;
4682
+ lastComputedAt: string | null;
4683
+ }>;
4684
+ };
3936
4685
  /**
3937
4686
  * 결제 내역 — 스코프 `settlement:r`. 결제 건(세션) 단위이고 주문 목록과 다르다. 주문이 만들어지지 않은
3938
4687
  * 결제(카드 거절·결제창 이탈·승인 결과 확인 중)도 그대로 나온다.
@@ -5053,7 +5802,7 @@ export declare const scopeAccessSchema: z.ZodEnum<{
5053
5802
  rw: "rw";
5054
5803
  }>;
5055
5804
  export type ScopeAccess = z.infer<typeof scopeAccessSchema>;
5056
- /** 리소스별로 부여 가능한 접근 수준. settlement는 쓰기 API가 없어 `r`만 존재한다 */
5805
+ /** 리소스별로 부여 가능한 접근 수준. settlement·analytics는 쓰기 API가 없어 `r`만 존재한다 */
5057
5806
  export declare const STORE_SCOPE_RESOURCES: {
5058
5807
  readonly product: readonly ["r", "rw"];
5059
5808
  readonly category: readonly ["r", "rw"];
@@ -5062,6 +5811,7 @@ export declare const STORE_SCOPE_RESOURCES: {
5062
5811
  readonly inquiry: readonly ["r", "rw"];
5063
5812
  readonly review: readonly ["r", "rw"];
5064
5813
  readonly settlement: readonly ["r"];
5814
+ readonly analytics: readonly ["r"];
5065
5815
  readonly webhook: readonly ["r", "rw"];
5066
5816
  readonly store: readonly ["r", "rw"];
5067
5817
  readonly member: readonly ["r", "rw"];
@@ -5075,6 +5825,7 @@ export declare const storeScopeResourceSchema: z.ZodEnum<{
5075
5825
  inquiry: "inquiry";
5076
5826
  review: "review";
5077
5827
  settlement: "settlement";
5828
+ analytics: "analytics";
5078
5829
  webhook: "webhook";
5079
5830
  store: "store";
5080
5831
  member: "member";
@@ -5087,8 +5838,8 @@ export declare function isStoreScope(scope: string): boolean;
5087
5838
  * 발급 시 지정한 스코프만 갖는다(발급자 보유 스코프 이내).
5088
5839
  */
5089
5840
  export declare const STORE_ROLE_SCOPES: {
5090
- readonly OWNER: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "settlement:r", "webhook:rw", "store:rw", "member:rw"];
5091
- readonly ADMIN: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "webhook:rw", "store:rw", "member:rw"];
5841
+ 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"];
5842
+ readonly ADMIN: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "analytics:r", "webhook:rw", "store:rw", "member:rw"];
5092
5843
  readonly STAFF: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw"];
5093
5844
  };
5094
5845
  //#endregion