3a-ecommerce-utils 1.0.0 → 1.0.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/README.md +5 -5
- package/dist/{chunk-PEAZVBSD.mjs → chunk-E26IEY7N.mjs} +0 -10
- package/dist/chunk-NOOKRTMI.mjs +1603 -0
- package/dist/client-BHgqHSo9.d.ts +464 -0
- package/dist/client-DgNiKrLe.d.mts +464 -0
- package/dist/client.d.mts +3 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.js +2338 -0
- package/dist/client.mjs +344 -0
- package/dist/config/tailwind.config.js +188 -0
- package/dist/config/tailwind.config.mjs +155 -0
- package/dist/config/vite.config.js +114 -0
- package/dist/config/vite.config.mjs +78 -0
- package/dist/config/vitest.base.config.js +98 -0
- package/dist/config/vitest.base.config.mjs +61 -0
- package/dist/config/webpack.base.config.js +148 -0
- package/dist/config/webpack.base.config.mjs +110 -0
- package/dist/index.d.mts +3 -462
- package/dist/index.d.ts +3 -462
- package/dist/index.js +8 -16
- package/dist/index.mjs +177 -1526
- package/dist/validation/server.d.mts +1 -1
- package/dist/validation/server.d.ts +1 -1
- package/dist/validation/server.js +14 -24
- package/dist/validation/server.mjs +2 -2
- package/package.json +28 -3
- package/src/api/errorHandler.ts +1 -1
- package/src/api/logger.client.ts +1 -1
- package/src/api/logger.ts +1 -1
- package/src/client.ts +41 -0
- package/src/config/jest.backend.config.js +3 -8
- package/src/config/jest.frontend.config.js +3 -3
- package/src/config/tsconfig.base.json +6 -6
- package/src/config/vite.config.ts +3 -3
- package/src/config/vitest.base.config.ts +3 -3
- package/src/queries.ts +28 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,2338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/client.ts
|
|
21
|
+
var client_exports = {};
|
|
22
|
+
__export(client_exports, {
|
|
23
|
+
ADD_ADDRESS_MUTATION: () => ADD_ADDRESS_MUTATION,
|
|
24
|
+
ADMIN_APP_URL: () => ADMIN_APP_URL,
|
|
25
|
+
API_ENDPOINTS: () => API_ENDPOINTS,
|
|
26
|
+
AUTH_COOKIE_NAMES: () => AUTH_COOKIE_NAMES,
|
|
27
|
+
CACHE_CONFIG: () => CACHE_CONFIG,
|
|
28
|
+
CANCEL_ORDER_MUTATION: () => CANCEL_ORDER_MUTATION,
|
|
29
|
+
COUPON_CONFIG: () => COUPON_CONFIG,
|
|
30
|
+
CREATE_CATEGORY_MUTATION: () => CREATE_CATEGORY_MUTATION,
|
|
31
|
+
CREATE_COUPON_MUTATION: () => CREATE_COUPON_MUTATION,
|
|
32
|
+
CREATE_ORDER_MUTATION: () => CREATE_ORDER_MUTATION,
|
|
33
|
+
CREATE_PRODUCT_MUTATION: () => CREATE_PRODUCT_MUTATION,
|
|
34
|
+
CREATE_REVIEW_MUTATION: () => CREATE_REVIEW_MUTATION,
|
|
35
|
+
DASHBOARD_STATS_QUERY: () => DASHBOARD_STATS_QUERY,
|
|
36
|
+
DATABASE_CONFIG: () => DATABASE_CONFIG,
|
|
37
|
+
DEFAULT_CORS_ORIGINS: () => DEFAULT_CORS_ORIGINS,
|
|
38
|
+
DELETE_ADDRESS_MUTATION: () => DELETE_ADDRESS_MUTATION,
|
|
39
|
+
DELETE_CATEGORY_MUTATION: () => DELETE_CATEGORY_MUTATION,
|
|
40
|
+
DELETE_COUPON_MUTATION: () => DELETE_COUPON_MUTATION,
|
|
41
|
+
DELETE_PRODUCT_MUTATION: () => DELETE_PRODUCT_MUTATION,
|
|
42
|
+
DELETE_REVIEW_MUTATION: () => DELETE_REVIEW_MUTATION,
|
|
43
|
+
DELETE_USER_MUTATION: () => DELETE_USER_MUTATION,
|
|
44
|
+
ENV_PRESETS: () => ENV_PRESETS,
|
|
45
|
+
ERROR_MESSAGES: () => ERROR_MESSAGES,
|
|
46
|
+
FORGOT_PASSWORD_MUTATION: () => FORGOT_PASSWORD_MUTATION,
|
|
47
|
+
GET_CATEGORIES_QUERY: () => GET_CATEGORIES_QUERY,
|
|
48
|
+
GET_CATEGORY_QUERY: () => GET_CATEGORY_QUERY,
|
|
49
|
+
GET_COUPONS_QUERY: () => GET_COUPONS_QUERY,
|
|
50
|
+
GET_COUPON_QUERY: () => GET_COUPON_QUERY,
|
|
51
|
+
GET_ME_QUERY: () => GET_ME_QUERY,
|
|
52
|
+
GET_MY_ADDRESSES_QUERY: () => GET_MY_ADDRESSES_QUERY,
|
|
53
|
+
GET_ORDERS_BY_CUSTOMER_QUERY: () => GET_ORDERS_BY_CUSTOMER_QUERY,
|
|
54
|
+
GET_ORDERS_QUERY: () => GET_ORDERS_QUERY,
|
|
55
|
+
GET_ORDER_QUERY: () => GET_ORDER_QUERY,
|
|
56
|
+
GET_PRODUCTS_BY_SELLER_QUERY: () => GET_PRODUCTS_BY_SELLER_QUERY,
|
|
57
|
+
GET_PRODUCTS_QUERY: () => GET_PRODUCTS_QUERY,
|
|
58
|
+
GET_PRODUCT_QUERY: () => GET_PRODUCT_QUERY,
|
|
59
|
+
GET_PRODUCT_REVIEWS_QUERY: () => GET_PRODUCT_REVIEWS_QUERY,
|
|
60
|
+
GET_USERS_QUERY: () => GET_USERS_QUERY,
|
|
61
|
+
GET_USER_BY_ID_QUERY: () => GET_USER_BY_ID_QUERY,
|
|
62
|
+
GET_USER_QUERY: () => GET_USER_QUERY,
|
|
63
|
+
GOOGLE_AUTH_MUTATION: () => GOOGLE_AUTH_MUTATION,
|
|
64
|
+
HTTP_STATUS: () => HTTP_STATUS,
|
|
65
|
+
JWT_CONFIG: () => JWT_CONFIG,
|
|
66
|
+
LOGIN_MUTATION: () => LOGIN_MUTATION,
|
|
67
|
+
LOGOUT_MUTATION: () => LOGOUT_MUTATION,
|
|
68
|
+
Logger: () => Logger,
|
|
69
|
+
MARK_REVIEW_HELPFUL_MUTATION: () => MARK_REVIEW_HELPFUL_MUTATION,
|
|
70
|
+
ORDER_CONFIG: () => ORDER_CONFIG,
|
|
71
|
+
PAGINATION: () => PAGINATION,
|
|
72
|
+
PORT_CONFIG: () => PORT_CONFIG,
|
|
73
|
+
PRODUCT_CONFIG: () => PRODUCT_CONFIG,
|
|
74
|
+
REGEX_PATTERNS: () => REGEX_PATTERNS,
|
|
75
|
+
REGISTER_MUTATION: () => REGISTER_MUTATION,
|
|
76
|
+
RESET_PASSWORD_MUTATION: () => RESET_PASSWORD_MUTATION,
|
|
77
|
+
SALES_ANALYTICS_QUERY: () => SALES_ANALYTICS_QUERY,
|
|
78
|
+
SEARCH_PRODUCTS_QUERY: () => SEARCH_PRODUCTS_QUERY,
|
|
79
|
+
SELLER_APP_URL: () => SELLER_APP_URL,
|
|
80
|
+
SEND_VERIFICATION_EMAIL_MUTATION: () => SEND_VERIFICATION_EMAIL_MUTATION,
|
|
81
|
+
SERVICE_URLS: () => SERVICE_URLS,
|
|
82
|
+
SET_DEFAULT_ADDRESS_MUTATION: () => SET_DEFAULT_ADDRESS_MUTATION,
|
|
83
|
+
SHELL_APP_URL: () => SHELL_APP_URL,
|
|
84
|
+
STOREFRONT_APP_URL: () => STOREFRONT_APP_URL,
|
|
85
|
+
SUCCESS_MESSAGES: () => SUCCESS_MESSAGES,
|
|
86
|
+
TIMEOUT_CONFIG: () => TIMEOUT_CONFIG,
|
|
87
|
+
TOGGLE_COUPON_STATUS_MUTATION: () => TOGGLE_COUPON_STATUS_MUTATION,
|
|
88
|
+
UPDATE_ADDRESS_MUTATION: () => UPDATE_ADDRESS_MUTATION,
|
|
89
|
+
UPDATE_CATEGORY_MUTATION: () => UPDATE_CATEGORY_MUTATION,
|
|
90
|
+
UPDATE_COUPON_MUTATION: () => UPDATE_COUPON_MUTATION,
|
|
91
|
+
UPDATE_ORDER_STATUS_MUTATION: () => UPDATE_ORDER_STATUS_MUTATION,
|
|
92
|
+
UPDATE_PAYMENT_STATUS_MUTATION: () => UPDATE_PAYMENT_STATUS_MUTATION,
|
|
93
|
+
UPDATE_PRODUCT_MUTATION: () => UPDATE_PRODUCT_MUTATION,
|
|
94
|
+
UPDATE_PROFILE_MUTATION: () => UPDATE_PROFILE_MUTATION,
|
|
95
|
+
UPDATE_USER_ROLE_MUTATION: () => UPDATE_USER_ROLE_MUTATION,
|
|
96
|
+
VALIDATE_COUPON_QUERY: () => VALIDATE_COUPON_QUERY,
|
|
97
|
+
VALIDATE_RESET_TOKEN_QUERY: () => VALIDATE_RESET_TOKEN_QUERY,
|
|
98
|
+
VERIFY_EMAIL_MUTATION: () => VERIFY_EMAIL_MUTATION,
|
|
99
|
+
addDays: () => addDays,
|
|
100
|
+
addHours: () => addHours,
|
|
101
|
+
areCookiesEnabled: () => areCookiesEnabled,
|
|
102
|
+
batchValidate: () => batchValidate,
|
|
103
|
+
calculateDiscount: () => calculateDiscount,
|
|
104
|
+
calculatePercentage: () => calculatePercentage,
|
|
105
|
+
calculateTax: () => calculateTax,
|
|
106
|
+
capitalize: () => capitalize,
|
|
107
|
+
capitalizeWords: () => capitalizeWords,
|
|
108
|
+
chunk: () => chunk,
|
|
109
|
+
clearAuth: () => clearAuth,
|
|
110
|
+
createApiResponse: () => createApiResponse,
|
|
111
|
+
debounce: () => debounce,
|
|
112
|
+
deepMerge: () => deepMerge,
|
|
113
|
+
delay: () => delay,
|
|
114
|
+
difference: () => difference,
|
|
115
|
+
flatten: () => flatten,
|
|
116
|
+
formatCurrency: () => formatCurrency,
|
|
117
|
+
formatDate: () => formatDate,
|
|
118
|
+
formatIndianCompact: () => formatIndianCompact,
|
|
119
|
+
formatNumber: () => formatNumber,
|
|
120
|
+
formatPrice: () => formatPrice,
|
|
121
|
+
formatPriceShort: () => formatPriceShort,
|
|
122
|
+
generateRandomCode: () => generateRandomCode,
|
|
123
|
+
getAccessToken: () => getAccessToken,
|
|
124
|
+
getCookie: () => getCookie,
|
|
125
|
+
getCurrentUser: () => getCurrentUser,
|
|
126
|
+
getDaysDifference: () => getDaysDifference,
|
|
127
|
+
getNestedValue: () => getNestedValue,
|
|
128
|
+
getRefreshToken: () => getRefreshToken,
|
|
129
|
+
getStoredAuth: () => getStoredAuth,
|
|
130
|
+
groupBy: () => groupBy,
|
|
131
|
+
intersection: () => intersection,
|
|
132
|
+
isArray: () => isArray,
|
|
133
|
+
isBoolean: () => isBoolean,
|
|
134
|
+
isDateInRange: () => isDateInRange,
|
|
135
|
+
isEmpty: () => isEmpty,
|
|
136
|
+
isFunction: () => isFunction,
|
|
137
|
+
isFutureDate: () => isFutureDate,
|
|
138
|
+
isNull: () => isNull,
|
|
139
|
+
isNullOrUndefined: () => isNullOrUndefined,
|
|
140
|
+
isNumber: () => isNumber,
|
|
141
|
+
isObject: () => isObject,
|
|
142
|
+
isPastDate: () => isPastDate,
|
|
143
|
+
isString: () => isString,
|
|
144
|
+
isTokenExpired: () => isTokenExpired,
|
|
145
|
+
isUndefined: () => isUndefined,
|
|
146
|
+
isValidCouponCode: () => isValidCouponCode,
|
|
147
|
+
isValidEmail: () => isValidEmail,
|
|
148
|
+
isValidObjectId: () => isValidObjectId,
|
|
149
|
+
isValidPassword: () => isValidPassword,
|
|
150
|
+
isValidPhone: () => isValidPhone,
|
|
151
|
+
isValidPostalCode: () => isValidPostalCode,
|
|
152
|
+
isValidSku: () => isValidSku,
|
|
153
|
+
isValidUrl: () => isValidUrl,
|
|
154
|
+
omit: () => omit,
|
|
155
|
+
pick: () => pick,
|
|
156
|
+
removeCookie: () => removeCookie,
|
|
157
|
+
removeDuplicates: () => removeDuplicates,
|
|
158
|
+
retry: () => retry,
|
|
159
|
+
roundDown: () => roundDown,
|
|
160
|
+
roundUp: () => roundUp,
|
|
161
|
+
setCookie: () => setCookie,
|
|
162
|
+
setNestedValue: () => setNestedValue,
|
|
163
|
+
setupAutoRefresh: () => setupAutoRefresh,
|
|
164
|
+
slugify: () => slugify,
|
|
165
|
+
sortBy: () => sortBy,
|
|
166
|
+
storeAuth: () => storeAuth,
|
|
167
|
+
throttle: () => throttle,
|
|
168
|
+
toTitleCase: () => toTitleCase,
|
|
169
|
+
truncate: () => truncate,
|
|
170
|
+
tryParse: () => tryParse,
|
|
171
|
+
unique: () => unique,
|
|
172
|
+
updateAccessToken: () => updateAccessToken,
|
|
173
|
+
validateCouponCode: () => validateCouponCode,
|
|
174
|
+
validateDate: () => validateDate,
|
|
175
|
+
validateDateRange: () => validateDateRange,
|
|
176
|
+
validateDiscountPercentage: () => validateDiscountPercentage,
|
|
177
|
+
validateEmail: () => validateEmail,
|
|
178
|
+
validateName: () => validateName,
|
|
179
|
+
validateObjectId: () => validateObjectId,
|
|
180
|
+
validatePagination: () => validatePagination,
|
|
181
|
+
validatePassword: () => validatePassword,
|
|
182
|
+
validatePhone: () => validatePhone,
|
|
183
|
+
validatePostalCode: () => validatePostalCode,
|
|
184
|
+
validatePrice: () => validatePrice,
|
|
185
|
+
validateQuantity: () => validateQuantity,
|
|
186
|
+
validateRating: () => validateRating,
|
|
187
|
+
validateSku: () => validateSku,
|
|
188
|
+
validateUrl: () => validateUrl,
|
|
189
|
+
validateUserRole: () => validateUserRole,
|
|
190
|
+
willTokenExpireSoon: () => willTokenExpireSoon,
|
|
191
|
+
withErrorHandling: () => withErrorHandling
|
|
192
|
+
});
|
|
193
|
+
module.exports = __toCommonJS(client_exports);
|
|
194
|
+
|
|
195
|
+
// src/constants/index.ts
|
|
196
|
+
var SHELL_APP_URL = "http://localhost:3000";
|
|
197
|
+
var ADMIN_APP_URL = "http://localhost:3001";
|
|
198
|
+
var SELLER_APP_URL = "http://localhost:3002";
|
|
199
|
+
var STOREFRONT_APP_URL = "http://localhost:3003";
|
|
200
|
+
var PORT_CONFIG = {
|
|
201
|
+
AUTH_SERVICE: 3011,
|
|
202
|
+
CATEGORY_SERVICE: 3012,
|
|
203
|
+
COUPON_SERVICE: 3013,
|
|
204
|
+
PRODUCT_SERVICE: 3014,
|
|
205
|
+
ORDER_SERVICE: 3015,
|
|
206
|
+
GRAPHQL_GATEWAY: 4e3,
|
|
207
|
+
STOREFRONT_APP: 3e3,
|
|
208
|
+
ADMIN_APP: 3001,
|
|
209
|
+
SELLER_APP: 3002,
|
|
210
|
+
SHELL_APP: 3003
|
|
211
|
+
};
|
|
212
|
+
var SERVICE_URLS = {
|
|
213
|
+
AUTH_SERVICE: `http://localhost:${PORT_CONFIG.AUTH_SERVICE}`,
|
|
214
|
+
CATEGORY_SERVICE: `http://localhost:${PORT_CONFIG.CATEGORY_SERVICE}`,
|
|
215
|
+
COUPON_SERVICE: `http://localhost:${PORT_CONFIG.COUPON_SERVICE}`,
|
|
216
|
+
PRODUCT_SERVICE: `http://localhost:${PORT_CONFIG.PRODUCT_SERVICE}`,
|
|
217
|
+
ORDER_SERVICE: `http://localhost:${PORT_CONFIG.ORDER_SERVICE}`,
|
|
218
|
+
GRAPHQL_GATEWAY: `http://localhost:${PORT_CONFIG.GRAPHQL_GATEWAY}/graphql`,
|
|
219
|
+
AUTH_API: `http://localhost:${PORT_CONFIG.AUTH_SERVICE}/api`,
|
|
220
|
+
CATEGORY_API: `http://localhost:${PORT_CONFIG.CATEGORY_SERVICE}/api`,
|
|
221
|
+
COUPON_API: `http://localhost:${PORT_CONFIG.COUPON_SERVICE}/api`,
|
|
222
|
+
PRODUCT_API: `http://localhost:${PORT_CONFIG.PRODUCT_SERVICE}/api`,
|
|
223
|
+
ORDER_API: `http://localhost:${PORT_CONFIG.ORDER_SERVICE}/api`
|
|
224
|
+
};
|
|
225
|
+
var DATABASE_CONFIG = {
|
|
226
|
+
MONGODB_URI: "mongodb+srv://admin:admin@cluster0.wei5wdz.mongodb.net/ecommerce?appName=Cluster0",
|
|
227
|
+
REDIS_URL: "redis://localhost:6379"
|
|
228
|
+
};
|
|
229
|
+
var DEFAULT_CORS_ORIGINS = [
|
|
230
|
+
"http://localhost:3000",
|
|
231
|
+
"http://localhost:3001",
|
|
232
|
+
"http://localhost:3002",
|
|
233
|
+
"http://localhost:3003"
|
|
234
|
+
];
|
|
235
|
+
var JWT_CONFIG = {
|
|
236
|
+
ACCESS_TOKEN_EXPIRY: "1h",
|
|
237
|
+
REFRESH_TOKEN_EXPIRY: "7d",
|
|
238
|
+
PASSWORD_MIN_LENGTH: 8,
|
|
239
|
+
PASSWORD_PATTERN: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/
|
|
240
|
+
};
|
|
241
|
+
var PAGINATION = {
|
|
242
|
+
DEFAULT_PAGE: 1,
|
|
243
|
+
DEFAULT_LIMIT: 10,
|
|
244
|
+
DEFAULT_PAGE_SIZE: 20,
|
|
245
|
+
MAX_PAGE_SIZE: 100,
|
|
246
|
+
MIN_PAGE_SIZE: 1,
|
|
247
|
+
DEFAULT_SORT_BY: "createdAt",
|
|
248
|
+
DEFAULT_SORT_ORDER: "DESC"
|
|
249
|
+
};
|
|
250
|
+
var PRODUCT_CONFIG = {
|
|
251
|
+
MIN_PRICE: 0,
|
|
252
|
+
MAX_PRICE: 999999.99,
|
|
253
|
+
MIN_STOCK: 0,
|
|
254
|
+
MAX_RATING: 5,
|
|
255
|
+
MIN_RATING: 0,
|
|
256
|
+
DEFAULT_RATING: 0,
|
|
257
|
+
MAX_IMAGE_SIZE: 5 * 1024 * 1024,
|
|
258
|
+
// 5MB
|
|
259
|
+
ALLOWED_IMAGE_TYPES: ["image/jpeg", "image/png", "image/webp"]
|
|
260
|
+
};
|
|
261
|
+
var ORDER_CONFIG = {
|
|
262
|
+
TAX_RATE: 0.1,
|
|
263
|
+
// 10% tax
|
|
264
|
+
SHIPPING_COST_STANDARD: 50,
|
|
265
|
+
SHIPPING_COST_EXPRESS: 150,
|
|
266
|
+
SHIPPING_COST_OVERNIGHT: 300,
|
|
267
|
+
MIN_ORDER_AMOUNT: 0,
|
|
268
|
+
MAX_ORDER_ITEMS: 1e3
|
|
269
|
+
};
|
|
270
|
+
var COUPON_CONFIG = {
|
|
271
|
+
CODE_LENGTH: 6,
|
|
272
|
+
CODE_UPPERCASE: true,
|
|
273
|
+
MAX_DISCOUNT_PERCENTAGE: 100,
|
|
274
|
+
MAX_DISCOUNT_FIXED: 999999.99,
|
|
275
|
+
MIN_PURCHASE_REQUIRED: 0
|
|
276
|
+
};
|
|
277
|
+
var API_ENDPOINTS = {
|
|
278
|
+
AUTH: {
|
|
279
|
+
LOGIN: "/api/auth/login",
|
|
280
|
+
REGISTER: "/api/auth/register",
|
|
281
|
+
LOGOUT: "/api/auth/logout",
|
|
282
|
+
PROFILE: "/api/auth/profile",
|
|
283
|
+
REFRESH: "/api/auth/refresh",
|
|
284
|
+
VERIFY: "/api/auth/verify"
|
|
285
|
+
},
|
|
286
|
+
PRODUCTS: {
|
|
287
|
+
LIST: "/api/products",
|
|
288
|
+
CREATE: "/api/products",
|
|
289
|
+
GET: "/api/products/:id",
|
|
290
|
+
UPDATE: "/api/products/:id",
|
|
291
|
+
DELETE: "/api/products/:id",
|
|
292
|
+
SEARCH: "/api/products/search"
|
|
293
|
+
},
|
|
294
|
+
ORDERS: {
|
|
295
|
+
LIST: "/api/orders",
|
|
296
|
+
CREATE: "/api/orders",
|
|
297
|
+
GET: "/api/orders/:id",
|
|
298
|
+
UPDATE: "/api/orders/:id",
|
|
299
|
+
CANCEL: "/api/orders/:id/cancel",
|
|
300
|
+
TRACK: "/api/orders/:id/track"
|
|
301
|
+
},
|
|
302
|
+
CATEGORIES: {
|
|
303
|
+
LIST: "/api/categories",
|
|
304
|
+
CREATE: "/api/categories",
|
|
305
|
+
GET: "/api/categories/:id",
|
|
306
|
+
UPDATE: "/api/categories/:id",
|
|
307
|
+
DELETE: "/api/categories/:id"
|
|
308
|
+
},
|
|
309
|
+
COUPONS: {
|
|
310
|
+
LIST: "/api/coupons",
|
|
311
|
+
CREATE: "/api/coupons",
|
|
312
|
+
GET: "/api/coupons/:id",
|
|
313
|
+
UPDATE: "/api/coupons/:id",
|
|
314
|
+
DELETE: "/api/coupons/:id",
|
|
315
|
+
VALIDATE: "/api/coupons/validate/:code"
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
var HTTP_STATUS = {
|
|
319
|
+
OK: 200,
|
|
320
|
+
CREATED: 201,
|
|
321
|
+
NO_CONTENT: 204,
|
|
322
|
+
BAD_REQUEST: 400,
|
|
323
|
+
UNAUTHORIZED: 401,
|
|
324
|
+
FORBIDDEN: 403,
|
|
325
|
+
NOT_FOUND: 404,
|
|
326
|
+
CONFLICT: 409,
|
|
327
|
+
UNPROCESSABLE_ENTITY: 422,
|
|
328
|
+
INTERNAL_SERVER_ERROR: 500,
|
|
329
|
+
SERVICE_UNAVAILABLE: 503
|
|
330
|
+
};
|
|
331
|
+
var ERROR_MESSAGES = {
|
|
332
|
+
// Auth errors
|
|
333
|
+
UNAUTHORIZED: "Unauthorized access",
|
|
334
|
+
FORBIDDEN: "Forbidden access",
|
|
335
|
+
NO_TOKEN: "No token provided. Access denied.",
|
|
336
|
+
INVALID_TOKEN: "Invalid or expired token",
|
|
337
|
+
INVALID_CREDENTIALS: "Invalid email or password",
|
|
338
|
+
USER_EXISTS: "User with this email already exists",
|
|
339
|
+
USER_NOT_FOUND: "User not found",
|
|
340
|
+
ACCOUNT_DEACTIVATED: "Account is deactivated. Please contact support.",
|
|
341
|
+
EMAIL_PASSWORD_MISMATCH: "Email and password does not match.",
|
|
342
|
+
// General errors
|
|
343
|
+
NOT_FOUND: "Resource not found",
|
|
344
|
+
VALIDATION_FAILED: "Validation failed",
|
|
345
|
+
INTERNAL_ERROR: "Internal server error",
|
|
346
|
+
SERVICE_UNAVAILABLE: "Service temporarily unavailable",
|
|
347
|
+
FAILED_TO_FETCH: "Failed to fetch data",
|
|
348
|
+
// Product errors
|
|
349
|
+
PRODUCT_NOT_FOUND: "Product not found",
|
|
350
|
+
INSUFFICIENT_STOCK: "Insufficient stock available",
|
|
351
|
+
FAILED_TO_GET_PRODUCTS: "Failed to get products",
|
|
352
|
+
FAILED_TO_CREATE_PRODUCT: "Failed to create product",
|
|
353
|
+
FAILED_TO_UPDATE_PRODUCT: "Failed to update product",
|
|
354
|
+
FAILED_TO_DELETE_PRODUCT: "Failed to delete product",
|
|
355
|
+
// Category errors
|
|
356
|
+
CATEGORY_NOT_FOUND: "Category not found",
|
|
357
|
+
FAILED_TO_GET_CATEGORIES: "Failed to get categories",
|
|
358
|
+
FAILED_TO_CREATE_CATEGORY: "Failed to create category",
|
|
359
|
+
FAILED_TO_UPDATE_CATEGORY: "Failed to update category",
|
|
360
|
+
FAILED_TO_DELETE_CATEGORY: "Failed to delete category",
|
|
361
|
+
// Order errors
|
|
362
|
+
ORDER_NOT_FOUND: "Order not found",
|
|
363
|
+
INVALID_ORDER_STATUS: "Invalid order status",
|
|
364
|
+
FAILED_TO_GET_ORDERS: "Failed to get orders",
|
|
365
|
+
FAILED_TO_CREATE_ORDER: "Failed to create order",
|
|
366
|
+
FAILED_TO_UPDATE_ORDER: "Failed to update order",
|
|
367
|
+
// Coupon errors
|
|
368
|
+
INVALID_COUPON: "Invalid or expired coupon",
|
|
369
|
+
COUPON_NOT_FOUND: "Coupon not found",
|
|
370
|
+
COUPON_EXPIRED: "Coupon has expired",
|
|
371
|
+
COUPON_LIMIT_REACHED: "Coupon usage limit reached",
|
|
372
|
+
FAILED_TO_GET_COUPONS: "Failed to get coupons",
|
|
373
|
+
FAILED_TO_CREATE_COUPON: "Failed to create coupon",
|
|
374
|
+
FAILED_TO_UPDATE_COUPON: "Failed to update coupon",
|
|
375
|
+
FAILED_TO_DELETE_COUPON: "Failed to delete coupon",
|
|
376
|
+
// Review errors
|
|
377
|
+
REVIEW_NOT_FOUND: "Review not found",
|
|
378
|
+
DUPLICATE_REVIEW: "You have already reviewed this product",
|
|
379
|
+
OWN_REVIEW_ONLY: "You can only delete your own reviews",
|
|
380
|
+
FAILED_TO_GET_REVIEWS: "Failed to get reviews",
|
|
381
|
+
FAILED_TO_CREATE_REVIEW: "Failed to create review",
|
|
382
|
+
FAILED_TO_DELETE_REVIEW: "Failed to delete review",
|
|
383
|
+
// Address errors
|
|
384
|
+
ADDRESS_NOT_FOUND: "Address not found",
|
|
385
|
+
FAILED_TO_GET_ADDRESSES: "Failed to get addresses"
|
|
386
|
+
};
|
|
387
|
+
var SUCCESS_MESSAGES = {
|
|
388
|
+
// General
|
|
389
|
+
CREATED: "Resource created successfully",
|
|
390
|
+
UPDATED: "Resource updated successfully",
|
|
391
|
+
DELETED: "Resource deleted successfully",
|
|
392
|
+
FETCHED: "Data fetched successfully",
|
|
393
|
+
// Auth
|
|
394
|
+
USER_REGISTERED: "User registered successfully",
|
|
395
|
+
LOGIN_SUCCESS: "Login successful",
|
|
396
|
+
LOGOUT_SUCCESS: "Logout successful",
|
|
397
|
+
PROFILE_UPDATED: "Profile updated successfully",
|
|
398
|
+
PASSWORD_CHANGED: "Password changed successfully",
|
|
399
|
+
// Product
|
|
400
|
+
PRODUCT_CREATED: "Product created successfully",
|
|
401
|
+
PRODUCT_UPDATED: "Product updated successfully",
|
|
402
|
+
PRODUCT_DELETED: "Product deleted successfully",
|
|
403
|
+
// Category
|
|
404
|
+
CATEGORY_CREATED: "Category created successfully",
|
|
405
|
+
CATEGORY_UPDATED: "Category updated successfully",
|
|
406
|
+
CATEGORY_DELETED: "Category deleted successfully",
|
|
407
|
+
// Order
|
|
408
|
+
ORDER_PLACED: "Order placed successfully",
|
|
409
|
+
ORDER_UPDATED: "Order updated successfully",
|
|
410
|
+
ORDER_CANCELLED: "Order cancelled successfully",
|
|
411
|
+
// Coupon
|
|
412
|
+
COUPON_CREATED: "Coupon created successfully",
|
|
413
|
+
COUPON_UPDATED: "Coupon updated successfully",
|
|
414
|
+
COUPON_DELETED: "Coupon deleted successfully",
|
|
415
|
+
COUPON_APPLIED: "Coupon applied successfully",
|
|
416
|
+
// Review
|
|
417
|
+
REVIEW_SUBMITTED: "Review submitted successfully",
|
|
418
|
+
REVIEW_DELETED: "Review deleted successfully",
|
|
419
|
+
// Payment
|
|
420
|
+
PAYMENT_SUCCESSFUL: "Payment processed successfully"
|
|
421
|
+
};
|
|
422
|
+
var CACHE_CONFIG = {
|
|
423
|
+
DASHBOARD_STATS_TTL: 3e4,
|
|
424
|
+
// 30 seconds
|
|
425
|
+
DASHBOARD_STATS_REFETCH: 6e4,
|
|
426
|
+
// 1 minute
|
|
427
|
+
PRODUCTS_TTL: 6e4,
|
|
428
|
+
// 1 minute
|
|
429
|
+
CATEGORIES_TTL: 12e4,
|
|
430
|
+
// 2 minutes
|
|
431
|
+
USER_PROFILE_TTL: 3e5,
|
|
432
|
+
// 5 minutes
|
|
433
|
+
ORDERS_TTL: 3e4
|
|
434
|
+
// 30 seconds
|
|
435
|
+
};
|
|
436
|
+
var TIMEOUT_CONFIG = {
|
|
437
|
+
API_REQUEST: 3e4,
|
|
438
|
+
// 30 seconds
|
|
439
|
+
DATABASE: 1e4,
|
|
440
|
+
// 10 seconds
|
|
441
|
+
GRAPHQL: 15e3
|
|
442
|
+
// 15 seconds
|
|
443
|
+
};
|
|
444
|
+
var REGEX_PATTERNS = {
|
|
445
|
+
EMAIL: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
446
|
+
PHONE: /^[\d\-\s()]{10,}$/,
|
|
447
|
+
POSTAL_CODE: /^\d{5,6}$/,
|
|
448
|
+
COUPON_CODE: /^[A-Z0-9]{6,20}$/,
|
|
449
|
+
PRODUCT_SKU: /^[A-Z0-9\-]{3,20}$/,
|
|
450
|
+
URL: /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w.-]*)*\/?$/
|
|
451
|
+
};
|
|
452
|
+
var ENV_PRESETS = {
|
|
453
|
+
DEVELOPMENT: {
|
|
454
|
+
corsOrigins: DEFAULT_CORS_ORIGINS,
|
|
455
|
+
logLevel: "debug",
|
|
456
|
+
apiTimeout: TIMEOUT_CONFIG.API_REQUEST
|
|
457
|
+
},
|
|
458
|
+
PRODUCTION: {
|
|
459
|
+
corsOrigins: ["https://ecommerce.example.com", "https://admin.ecommerce.example.com"],
|
|
460
|
+
logLevel: "info",
|
|
461
|
+
apiTimeout: TIMEOUT_CONFIG.API_REQUEST
|
|
462
|
+
},
|
|
463
|
+
TESTING: {
|
|
464
|
+
corsOrigins: ["http://localhost:*"],
|
|
465
|
+
logLevel: "error",
|
|
466
|
+
apiTimeout: TIMEOUT_CONFIG.API_REQUEST
|
|
467
|
+
}
|
|
468
|
+
};
|
|
469
|
+
|
|
470
|
+
// src/cookies.ts
|
|
471
|
+
var DEFAULT_OPTIONS = {
|
|
472
|
+
path: "/",
|
|
473
|
+
secure: process.env.NODE_ENV === "production",
|
|
474
|
+
sameSite: "Lax"
|
|
475
|
+
};
|
|
476
|
+
var setCookie = (name, value, options = {}) => {
|
|
477
|
+
if (typeof document === "undefined") return;
|
|
478
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
479
|
+
let cookieString = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
480
|
+
if (opts.expires) {
|
|
481
|
+
const date = /* @__PURE__ */ new Date();
|
|
482
|
+
date.setTime(date.getTime() + opts.expires * 24 * 60 * 60 * 1e3);
|
|
483
|
+
cookieString += `; expires=${date.toUTCString()}`;
|
|
484
|
+
}
|
|
485
|
+
if (opts.path) {
|
|
486
|
+
cookieString += `; path=${opts.path}`;
|
|
487
|
+
}
|
|
488
|
+
if (opts.domain) {
|
|
489
|
+
cookieString += `; domain=${opts.domain}`;
|
|
490
|
+
}
|
|
491
|
+
if (opts.secure) {
|
|
492
|
+
cookieString += "; secure";
|
|
493
|
+
}
|
|
494
|
+
if (opts.sameSite) {
|
|
495
|
+
cookieString += `; samesite=${opts.sameSite}`;
|
|
496
|
+
}
|
|
497
|
+
document.cookie = cookieString;
|
|
498
|
+
};
|
|
499
|
+
var getCookie = (name) => {
|
|
500
|
+
if (typeof document === "undefined") return null;
|
|
501
|
+
const nameEQ = `${encodeURIComponent(name)}=`;
|
|
502
|
+
const cookies = document.cookie.split(";");
|
|
503
|
+
for (let cookie of cookies) {
|
|
504
|
+
cookie = cookie.trim();
|
|
505
|
+
if (cookie.indexOf(nameEQ) === 0) {
|
|
506
|
+
return decodeURIComponent(cookie.substring(nameEQ.length));
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
return null;
|
|
510
|
+
};
|
|
511
|
+
var removeCookie = (name, options = {}) => {
|
|
512
|
+
if (typeof document === "undefined") return;
|
|
513
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
514
|
+
setCookie(name, "", { ...opts, expires: -1 });
|
|
515
|
+
};
|
|
516
|
+
var areCookiesEnabled = () => {
|
|
517
|
+
if (typeof document === "undefined") return false;
|
|
518
|
+
try {
|
|
519
|
+
document.cookie = "cookietest=1";
|
|
520
|
+
const result = document.cookie.indexOf("cookietest=") !== -1;
|
|
521
|
+
document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";
|
|
522
|
+
return result;
|
|
523
|
+
} catch {
|
|
524
|
+
return false;
|
|
525
|
+
}
|
|
526
|
+
};
|
|
527
|
+
var AUTH_COOKIE_NAMES = {
|
|
528
|
+
ACCESS_TOKEN: "accessToken",
|
|
529
|
+
REFRESH_TOKEN: "refreshToken",
|
|
530
|
+
TOKEN_EXPIRY: "tokenExpiry",
|
|
531
|
+
USER: "user"
|
|
532
|
+
};
|
|
533
|
+
|
|
534
|
+
// src/auth.ts
|
|
535
|
+
var ACCESS_TOKEN_EXPIRY = 1;
|
|
536
|
+
var REFRESH_TOKEN_EXPIRY = 7;
|
|
537
|
+
var storeAuth = (data) => {
|
|
538
|
+
setCookie(AUTH_COOKIE_NAMES.USER, JSON.stringify(data.user), {
|
|
539
|
+
expires: REFRESH_TOKEN_EXPIRY
|
|
540
|
+
});
|
|
541
|
+
setCookie(AUTH_COOKIE_NAMES.ACCESS_TOKEN, data.accessToken, {
|
|
542
|
+
expires: ACCESS_TOKEN_EXPIRY
|
|
543
|
+
});
|
|
544
|
+
if (data.refreshToken) {
|
|
545
|
+
setCookie(AUTH_COOKIE_NAMES.REFRESH_TOKEN, data.refreshToken, {
|
|
546
|
+
expires: REFRESH_TOKEN_EXPIRY
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
const expiresIn = data.expiresIn || 3600;
|
|
550
|
+
const expiryTime = (/* @__PURE__ */ new Date()).getTime() + expiresIn * 1e3;
|
|
551
|
+
setCookie(AUTH_COOKIE_NAMES.TOKEN_EXPIRY, expiryTime.toString(), {
|
|
552
|
+
expires: ACCESS_TOKEN_EXPIRY
|
|
553
|
+
});
|
|
554
|
+
};
|
|
555
|
+
var getStoredAuth = () => {
|
|
556
|
+
const userStr = getCookie(AUTH_COOKIE_NAMES.USER);
|
|
557
|
+
const token = getCookie(AUTH_COOKIE_NAMES.ACCESS_TOKEN);
|
|
558
|
+
const expiryStr = getCookie(AUTH_COOKIE_NAMES.TOKEN_EXPIRY);
|
|
559
|
+
if (!userStr || !token) {
|
|
560
|
+
return null;
|
|
561
|
+
}
|
|
562
|
+
try {
|
|
563
|
+
const user = JSON.parse(userStr);
|
|
564
|
+
const expiresIn = expiryStr ? parseInt(expiryStr) - (/* @__PURE__ */ new Date()).getTime() : 0;
|
|
565
|
+
return {
|
|
566
|
+
user,
|
|
567
|
+
token,
|
|
568
|
+
expiresIn: Math.max(0, expiresIn)
|
|
569
|
+
};
|
|
570
|
+
} catch {
|
|
571
|
+
return null;
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
var isTokenExpired = () => {
|
|
575
|
+
const tokenExpiry = getCookie(AUTH_COOKIE_NAMES.TOKEN_EXPIRY);
|
|
576
|
+
if (!tokenExpiry) {
|
|
577
|
+
return true;
|
|
578
|
+
}
|
|
579
|
+
const now = (/* @__PURE__ */ new Date()).getTime();
|
|
580
|
+
return now > parseInt(tokenExpiry);
|
|
581
|
+
};
|
|
582
|
+
var willTokenExpireSoon = () => {
|
|
583
|
+
const tokenExpiry = getCookie(AUTH_COOKIE_NAMES.TOKEN_EXPIRY);
|
|
584
|
+
if (!tokenExpiry) {
|
|
585
|
+
return true;
|
|
586
|
+
}
|
|
587
|
+
const now = (/* @__PURE__ */ new Date()).getTime();
|
|
588
|
+
const expiryTime = parseInt(tokenExpiry);
|
|
589
|
+
const timeUntilExpiry = expiryTime - now;
|
|
590
|
+
return timeUntilExpiry < 3e5;
|
|
591
|
+
};
|
|
592
|
+
var clearAuth = () => {
|
|
593
|
+
removeCookie(AUTH_COOKIE_NAMES.USER);
|
|
594
|
+
removeCookie(AUTH_COOKIE_NAMES.ACCESS_TOKEN);
|
|
595
|
+
removeCookie(AUTH_COOKIE_NAMES.REFRESH_TOKEN);
|
|
596
|
+
removeCookie(AUTH_COOKIE_NAMES.TOKEN_EXPIRY);
|
|
597
|
+
};
|
|
598
|
+
var validateUserRole = (requiredRole) => {
|
|
599
|
+
const userStr = getCookie(AUTH_COOKIE_NAMES.USER);
|
|
600
|
+
if (!userStr) {
|
|
601
|
+
return false;
|
|
602
|
+
}
|
|
603
|
+
try {
|
|
604
|
+
const user = JSON.parse(userStr);
|
|
605
|
+
return user.role === requiredRole;
|
|
606
|
+
} catch {
|
|
607
|
+
return false;
|
|
608
|
+
}
|
|
609
|
+
};
|
|
610
|
+
var getCurrentUser = () => {
|
|
611
|
+
const userStr = getCookie(AUTH_COOKIE_NAMES.USER);
|
|
612
|
+
if (!userStr) {
|
|
613
|
+
return null;
|
|
614
|
+
}
|
|
615
|
+
try {
|
|
616
|
+
return JSON.parse(userStr);
|
|
617
|
+
} catch {
|
|
618
|
+
return null;
|
|
619
|
+
}
|
|
620
|
+
};
|
|
621
|
+
var getAccessToken = () => {
|
|
622
|
+
return getCookie(AUTH_COOKIE_NAMES.ACCESS_TOKEN);
|
|
623
|
+
};
|
|
624
|
+
var getRefreshToken = () => {
|
|
625
|
+
return getCookie(AUTH_COOKIE_NAMES.REFRESH_TOKEN);
|
|
626
|
+
};
|
|
627
|
+
var updateAccessToken = (newToken, expiresIn) => {
|
|
628
|
+
setCookie(AUTH_COOKIE_NAMES.ACCESS_TOKEN, newToken, {
|
|
629
|
+
expires: ACCESS_TOKEN_EXPIRY
|
|
630
|
+
});
|
|
631
|
+
if (expiresIn) {
|
|
632
|
+
const expiryTime = (/* @__PURE__ */ new Date()).getTime() + expiresIn * 1e3;
|
|
633
|
+
setCookie(AUTH_COOKIE_NAMES.TOKEN_EXPIRY, expiryTime.toString(), {
|
|
634
|
+
expires: ACCESS_TOKEN_EXPIRY
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
};
|
|
638
|
+
var setupAutoRefresh = (refreshFn) => {
|
|
639
|
+
const checkAndRefresh = async () => {
|
|
640
|
+
if (willTokenExpireSoon() && !isTokenExpired()) {
|
|
641
|
+
try {
|
|
642
|
+
await refreshFn();
|
|
643
|
+
} catch (error) {
|
|
644
|
+
clearAuth();
|
|
645
|
+
window.location.href = SHELL_APP_URL;
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
};
|
|
649
|
+
const interval = setInterval(checkAndRefresh, 5 * 60 * 1e3);
|
|
650
|
+
return () => clearInterval(interval);
|
|
651
|
+
};
|
|
652
|
+
|
|
653
|
+
// src/helpers.ts
|
|
654
|
+
var capitalize = (str) => {
|
|
655
|
+
if (!str) return "";
|
|
656
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
657
|
+
};
|
|
658
|
+
var capitalizeWords = (str) => {
|
|
659
|
+
if (!str) return "";
|
|
660
|
+
return str.split(" ").map((word) => capitalize(word)).join(" ");
|
|
661
|
+
};
|
|
662
|
+
var toTitleCase = (str) => {
|
|
663
|
+
if (!str) return "";
|
|
664
|
+
return str.replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());
|
|
665
|
+
};
|
|
666
|
+
var slugify = (str) => {
|
|
667
|
+
if (!str) return "";
|
|
668
|
+
return str.toLowerCase().trim().replace(/\s+/g, "-").replace(/[^\w-]/g, "");
|
|
669
|
+
};
|
|
670
|
+
var generateRandomCode = (length = 6) => {
|
|
671
|
+
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
672
|
+
let result = "";
|
|
673
|
+
for (let i = 0; i < length; i++) {
|
|
674
|
+
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
675
|
+
}
|
|
676
|
+
return result;
|
|
677
|
+
};
|
|
678
|
+
var truncate = (str, length, suffix = "...") => {
|
|
679
|
+
if (!str || str.length <= length) return str;
|
|
680
|
+
return str.substring(0, length) + suffix;
|
|
681
|
+
};
|
|
682
|
+
var formatCurrency = (amount, currency = "USD") => {
|
|
683
|
+
return new Intl.NumberFormat("en-US", {
|
|
684
|
+
style: "currency",
|
|
685
|
+
currency
|
|
686
|
+
}).format(amount);
|
|
687
|
+
};
|
|
688
|
+
var formatNumber = (num, decimals = 2) => {
|
|
689
|
+
return parseFloat(num.toFixed(decimals));
|
|
690
|
+
};
|
|
691
|
+
var roundUp = (num, decimals = 2) => {
|
|
692
|
+
const factor = Math.pow(10, decimals);
|
|
693
|
+
return Math.ceil(num * factor) / factor;
|
|
694
|
+
};
|
|
695
|
+
var roundDown = (num, decimals = 2) => {
|
|
696
|
+
const factor = Math.pow(10, decimals);
|
|
697
|
+
return Math.floor(num * factor) / factor;
|
|
698
|
+
};
|
|
699
|
+
var calculatePercentage = (value, percentage) => {
|
|
700
|
+
return formatNumber(value * percentage / 100);
|
|
701
|
+
};
|
|
702
|
+
var calculateDiscount = (price, discountPercent) => {
|
|
703
|
+
return formatNumber(price - price * discountPercent / 100);
|
|
704
|
+
};
|
|
705
|
+
var calculateTax = (amount, taxRate) => {
|
|
706
|
+
return formatNumber(amount * taxRate);
|
|
707
|
+
};
|
|
708
|
+
var chunk = (arr, size) => {
|
|
709
|
+
const chunks = [];
|
|
710
|
+
for (let i = 0; i < arr.length; i += size) {
|
|
711
|
+
chunks.push(arr.slice(i, i + size));
|
|
712
|
+
}
|
|
713
|
+
return chunks;
|
|
714
|
+
};
|
|
715
|
+
var unique = (arr) => {
|
|
716
|
+
return Array.from(new Set(arr));
|
|
717
|
+
};
|
|
718
|
+
var removeDuplicates = (arr, key) => {
|
|
719
|
+
const seen = /* @__PURE__ */ new Set();
|
|
720
|
+
return arr.filter((item) => {
|
|
721
|
+
const value = item[key];
|
|
722
|
+
if (seen.has(value)) return false;
|
|
723
|
+
seen.add(value);
|
|
724
|
+
return true;
|
|
725
|
+
});
|
|
726
|
+
};
|
|
727
|
+
var groupBy = (arr, key) => {
|
|
728
|
+
return arr.reduce((result, item) => {
|
|
729
|
+
const groupKey = String(item[key]);
|
|
730
|
+
if (!result[groupKey]) {
|
|
731
|
+
result[groupKey] = [];
|
|
732
|
+
}
|
|
733
|
+
result[groupKey].push(item);
|
|
734
|
+
return result;
|
|
735
|
+
}, {});
|
|
736
|
+
};
|
|
737
|
+
var sortBy = (arr, key, order = "ASC") => {
|
|
738
|
+
const sorted = [...arr].sort((a, b) => {
|
|
739
|
+
const aVal = a[key];
|
|
740
|
+
const bVal = b[key];
|
|
741
|
+
if (aVal < bVal) return order === "ASC" ? -1 : 1;
|
|
742
|
+
if (aVal > bVal) return order === "ASC" ? 1 : -1;
|
|
743
|
+
return 0;
|
|
744
|
+
});
|
|
745
|
+
return sorted;
|
|
746
|
+
};
|
|
747
|
+
var flatten = (arr) => {
|
|
748
|
+
return arr.reduce((flat, item) => flat.concat(item), []);
|
|
749
|
+
};
|
|
750
|
+
var difference = (arr1, arr2) => {
|
|
751
|
+
return arr1.filter((item) => !arr2.includes(item));
|
|
752
|
+
};
|
|
753
|
+
var intersection = (arr1, arr2) => {
|
|
754
|
+
return arr1.filter((item) => arr2.includes(item));
|
|
755
|
+
};
|
|
756
|
+
var omit = (obj, keys) => {
|
|
757
|
+
const result = { ...obj };
|
|
758
|
+
keys.forEach((key) => delete result[key]);
|
|
759
|
+
return result;
|
|
760
|
+
};
|
|
761
|
+
var pick = (obj, keys) => {
|
|
762
|
+
const result = {};
|
|
763
|
+
keys.forEach((key) => {
|
|
764
|
+
if (key in obj) {
|
|
765
|
+
result[key] = obj[key];
|
|
766
|
+
}
|
|
767
|
+
});
|
|
768
|
+
return result;
|
|
769
|
+
};
|
|
770
|
+
var deepMerge = (target, source) => {
|
|
771
|
+
const result = { ...target };
|
|
772
|
+
for (const key in source) {
|
|
773
|
+
if (source.hasOwnProperty(key)) {
|
|
774
|
+
if (typeof source[key] === "object" && source[key] !== null && !Array.isArray(source[key])) {
|
|
775
|
+
result[key] = deepMerge(
|
|
776
|
+
target[key] || {},
|
|
777
|
+
source[key]
|
|
778
|
+
);
|
|
779
|
+
} else {
|
|
780
|
+
result[key] = source[key];
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
return result;
|
|
785
|
+
};
|
|
786
|
+
var isEmpty = (obj) => {
|
|
787
|
+
return Object.keys(obj).length === 0;
|
|
788
|
+
};
|
|
789
|
+
var getNestedValue = (obj, path) => {
|
|
790
|
+
const keys = path.split(".");
|
|
791
|
+
let result = obj;
|
|
792
|
+
for (const key of keys) {
|
|
793
|
+
if (result && typeof result === "object" && key in result) {
|
|
794
|
+
result = result[key];
|
|
795
|
+
} else {
|
|
796
|
+
return void 0;
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
return result;
|
|
800
|
+
};
|
|
801
|
+
var setNestedValue = (obj, path, value) => {
|
|
802
|
+
const keys = path.split(".");
|
|
803
|
+
let current = obj;
|
|
804
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
805
|
+
const key = keys[i];
|
|
806
|
+
if (!(key in current) || typeof current[key] !== "object") {
|
|
807
|
+
current[key] = {};
|
|
808
|
+
}
|
|
809
|
+
current = current[key];
|
|
810
|
+
}
|
|
811
|
+
current[keys[keys.length - 1]] = value;
|
|
812
|
+
};
|
|
813
|
+
var formatDate = (date, format = "MM/DD/YYYY") => {
|
|
814
|
+
const dateObj = new Date(date);
|
|
815
|
+
const year = dateObj.getFullYear();
|
|
816
|
+
const month = String(dateObj.getMonth() + 1).padStart(2, "0");
|
|
817
|
+
const day = String(dateObj.getDate()).padStart(2, "0");
|
|
818
|
+
const hours = String(dateObj.getHours()).padStart(2, "0");
|
|
819
|
+
const minutes = String(dateObj.getMinutes()).padStart(2, "0");
|
|
820
|
+
const seconds = String(dateObj.getSeconds()).padStart(2, "0");
|
|
821
|
+
return format.replace("YYYY", String(year)).replace("MM", month).replace("DD", day).replace("HH", hours).replace("mm", minutes).replace("ss", seconds);
|
|
822
|
+
};
|
|
823
|
+
var addDays = (date, days) => {
|
|
824
|
+
const result = new Date(date);
|
|
825
|
+
result.setDate(result.getDate() + days);
|
|
826
|
+
return result;
|
|
827
|
+
};
|
|
828
|
+
var addHours = (date, hours) => {
|
|
829
|
+
const result = new Date(date);
|
|
830
|
+
result.setHours(result.getHours() + hours);
|
|
831
|
+
return result;
|
|
832
|
+
};
|
|
833
|
+
var getDaysDifference = (date1, date2) => {
|
|
834
|
+
const diffTime = Math.abs(date2.getTime() - date1.getTime());
|
|
835
|
+
return Math.ceil(diffTime / (1e3 * 60 * 60 * 24));
|
|
836
|
+
};
|
|
837
|
+
var isDateInRange = (date, startDate, endDate) => {
|
|
838
|
+
return date >= startDate && date <= endDate;
|
|
839
|
+
};
|
|
840
|
+
var isFutureDate = (date) => {
|
|
841
|
+
return date > /* @__PURE__ */ new Date();
|
|
842
|
+
};
|
|
843
|
+
var isPastDate = (date) => {
|
|
844
|
+
return date < /* @__PURE__ */ new Date();
|
|
845
|
+
};
|
|
846
|
+
var delay = (ms) => {
|
|
847
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
848
|
+
};
|
|
849
|
+
var debounce = (fn, wait) => {
|
|
850
|
+
let timeoutId;
|
|
851
|
+
return (...args) => {
|
|
852
|
+
clearTimeout(timeoutId);
|
|
853
|
+
timeoutId = setTimeout(() => fn(...args), wait);
|
|
854
|
+
};
|
|
855
|
+
};
|
|
856
|
+
var throttle = (fn, limit) => {
|
|
857
|
+
let inThrottle;
|
|
858
|
+
return (...args) => {
|
|
859
|
+
if (!inThrottle) {
|
|
860
|
+
fn(...args);
|
|
861
|
+
inThrottle = true;
|
|
862
|
+
setTimeout(() => inThrottle = false, limit);
|
|
863
|
+
}
|
|
864
|
+
};
|
|
865
|
+
};
|
|
866
|
+
var tryParse = (json, fallback) => {
|
|
867
|
+
try {
|
|
868
|
+
return JSON.parse(json);
|
|
869
|
+
} catch {
|
|
870
|
+
return fallback;
|
|
871
|
+
}
|
|
872
|
+
};
|
|
873
|
+
var withErrorHandling = async (fn) => {
|
|
874
|
+
try {
|
|
875
|
+
const data = await fn();
|
|
876
|
+
return { success: true, data };
|
|
877
|
+
} catch (error) {
|
|
878
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
879
|
+
return { success: false, error: message };
|
|
880
|
+
}
|
|
881
|
+
};
|
|
882
|
+
var createApiResponse = (success, data, message, statusCode = 200) => {
|
|
883
|
+
return {
|
|
884
|
+
success,
|
|
885
|
+
statusCode,
|
|
886
|
+
message: message || (success ? "Success" : "Error"),
|
|
887
|
+
data: data || (success ? {} : null)
|
|
888
|
+
};
|
|
889
|
+
};
|
|
890
|
+
var retry = async (fn, maxAttempts = 3, delayMs = 1e3) => {
|
|
891
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
892
|
+
try {
|
|
893
|
+
return await fn();
|
|
894
|
+
} catch (error) {
|
|
895
|
+
if (attempt === maxAttempts) throw error;
|
|
896
|
+
await delay(delayMs * attempt);
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
throw new Error("Retry failed");
|
|
900
|
+
};
|
|
901
|
+
var isString = (val) => typeof val === "string";
|
|
902
|
+
var isNumber = (val) => typeof val === "number";
|
|
903
|
+
var isBoolean = (val) => typeof val === "boolean";
|
|
904
|
+
var isArray = (val) => Array.isArray(val);
|
|
905
|
+
var isObject = (val) => typeof val === "object" && val !== null && !Array.isArray(val);
|
|
906
|
+
var isFunction = (val) => typeof val === "function";
|
|
907
|
+
var isNull = (val) => val === null;
|
|
908
|
+
var isUndefined = (val) => val === void 0;
|
|
909
|
+
var isNullOrUndefined = (val) => val === null || val === void 0;
|
|
910
|
+
var formatIndianCompact = (num = 0) => {
|
|
911
|
+
if (num >= 1e7) {
|
|
912
|
+
return (num / 1e7).toFixed(2).replace(/\.00$/, "") + "Cr";
|
|
913
|
+
}
|
|
914
|
+
if (num >= 1e5) {
|
|
915
|
+
return (num / 1e5).toFixed(2).replace(/\.00$/, "") + "L";
|
|
916
|
+
}
|
|
917
|
+
return "\u20B9" + num?.toLocaleString("en-IN", {
|
|
918
|
+
minimumFractionDigits: 2,
|
|
919
|
+
maximumFractionDigits: 2
|
|
920
|
+
});
|
|
921
|
+
};
|
|
922
|
+
function formatPrice(price) {
|
|
923
|
+
return `\u20B9${price?.toFixed(2)}`;
|
|
924
|
+
}
|
|
925
|
+
function formatPriceShort(price) {
|
|
926
|
+
if (price >= 1e5) {
|
|
927
|
+
return `\u20B9${(price / 1e5).toFixed(1)}L`;
|
|
928
|
+
} else if (price >= 1e3) {
|
|
929
|
+
return `\u20B9${(price / 1e3).toFixed(1)}K`;
|
|
930
|
+
}
|
|
931
|
+
return `\u20B9${price.toFixed(0)}`;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
// src/validation/client.ts
|
|
935
|
+
var isValidEmail = (email) => {
|
|
936
|
+
return REGEX_PATTERNS.EMAIL.test(email);
|
|
937
|
+
};
|
|
938
|
+
var validateEmail = (email) => {
|
|
939
|
+
if (!email || email.trim() === "") {
|
|
940
|
+
return { valid: false, error: "Email is required" };
|
|
941
|
+
}
|
|
942
|
+
if (!isValidEmail(email)) {
|
|
943
|
+
return { valid: false, error: "Invalid email format" };
|
|
944
|
+
}
|
|
945
|
+
if (email.length > 255) {
|
|
946
|
+
return { valid: false, error: "Email is too long" };
|
|
947
|
+
}
|
|
948
|
+
return { valid: true };
|
|
949
|
+
};
|
|
950
|
+
var isValidPassword = (password) => {
|
|
951
|
+
return JWT_CONFIG.PASSWORD_PATTERN.test(password);
|
|
952
|
+
};
|
|
953
|
+
var validatePassword = (password) => {
|
|
954
|
+
if (!password) {
|
|
955
|
+
return { valid: false, error: "Password is required" };
|
|
956
|
+
}
|
|
957
|
+
if (password.length < JWT_CONFIG.PASSWORD_MIN_LENGTH) {
|
|
958
|
+
return {
|
|
959
|
+
valid: false,
|
|
960
|
+
error: `Password must be at least ${JWT_CONFIG.PASSWORD_MIN_LENGTH} characters`
|
|
961
|
+
};
|
|
962
|
+
}
|
|
963
|
+
if (!isValidPassword(password)) {
|
|
964
|
+
return {
|
|
965
|
+
valid: false,
|
|
966
|
+
error: "Password must contain uppercase, lowercase, number, and special character (@$!%*?&)"
|
|
967
|
+
};
|
|
968
|
+
}
|
|
969
|
+
return { valid: true };
|
|
970
|
+
};
|
|
971
|
+
var validateName = (name) => {
|
|
972
|
+
if (!name || name.trim() === "") {
|
|
973
|
+
return { valid: false, error: "Name is required" };
|
|
974
|
+
}
|
|
975
|
+
if (name.length < 2) {
|
|
976
|
+
return { valid: false, error: "Name must be at least 2 characters" };
|
|
977
|
+
}
|
|
978
|
+
if (name.length > 100) {
|
|
979
|
+
return { valid: false, error: "Name is too long" };
|
|
980
|
+
}
|
|
981
|
+
if (!/^[a-zA-Z\s'-]+$/.test(name)) {
|
|
982
|
+
return {
|
|
983
|
+
valid: false,
|
|
984
|
+
error: "Name can only contain letters, spaces, hyphens, and apostrophes"
|
|
985
|
+
};
|
|
986
|
+
}
|
|
987
|
+
return { valid: true };
|
|
988
|
+
};
|
|
989
|
+
var isValidPhone = (phone) => {
|
|
990
|
+
return REGEX_PATTERNS.PHONE.test(phone);
|
|
991
|
+
};
|
|
992
|
+
var validatePhone = (phone) => {
|
|
993
|
+
if (!phone) {
|
|
994
|
+
return { valid: false, error: "Phone number is required" };
|
|
995
|
+
}
|
|
996
|
+
if (!isValidPhone(phone)) {
|
|
997
|
+
return { valid: false, error: "Invalid phone number format" };
|
|
998
|
+
}
|
|
999
|
+
return { valid: true };
|
|
1000
|
+
};
|
|
1001
|
+
var isValidPostalCode = (postalCode) => {
|
|
1002
|
+
return REGEX_PATTERNS.POSTAL_CODE.test(postalCode);
|
|
1003
|
+
};
|
|
1004
|
+
var validatePostalCode = (postalCode) => {
|
|
1005
|
+
if (!postalCode) {
|
|
1006
|
+
return { valid: false, error: "Postal code is required" };
|
|
1007
|
+
}
|
|
1008
|
+
if (!isValidPostalCode(postalCode)) {
|
|
1009
|
+
return { valid: false, error: "Invalid postal code format" };
|
|
1010
|
+
}
|
|
1011
|
+
return { valid: true };
|
|
1012
|
+
};
|
|
1013
|
+
var isValidCouponCode = (code) => {
|
|
1014
|
+
return REGEX_PATTERNS.COUPON_CODE.test(code);
|
|
1015
|
+
};
|
|
1016
|
+
var validateCouponCode = (code) => {
|
|
1017
|
+
if (!code) {
|
|
1018
|
+
return { valid: false, error: "Coupon code is required" };
|
|
1019
|
+
}
|
|
1020
|
+
if (!isValidCouponCode(code)) {
|
|
1021
|
+
return { valid: false, error: "Invalid coupon code format (6-20 alphanumeric characters)" };
|
|
1022
|
+
}
|
|
1023
|
+
return { valid: true };
|
|
1024
|
+
};
|
|
1025
|
+
var validatePrice = (price) => {
|
|
1026
|
+
const numPrice = parseFloat(price);
|
|
1027
|
+
if (isNaN(numPrice)) {
|
|
1028
|
+
return { valid: false, error: "Price must be a valid number" };
|
|
1029
|
+
}
|
|
1030
|
+
if (numPrice < 0) {
|
|
1031
|
+
return { valid: false, error: "Price cannot be negative" };
|
|
1032
|
+
}
|
|
1033
|
+
if (numPrice > 999999.99) {
|
|
1034
|
+
return { valid: false, error: "Price exceeds maximum allowed value" };
|
|
1035
|
+
}
|
|
1036
|
+
return { valid: true };
|
|
1037
|
+
};
|
|
1038
|
+
var validateQuantity = (qty) => {
|
|
1039
|
+
const numQty = parseInt(qty, 10);
|
|
1040
|
+
if (isNaN(numQty)) {
|
|
1041
|
+
return { valid: false, error: "Quantity must be a valid number" };
|
|
1042
|
+
}
|
|
1043
|
+
if (numQty < 0) {
|
|
1044
|
+
return { valid: false, error: "Quantity cannot be negative" };
|
|
1045
|
+
}
|
|
1046
|
+
if (!Number.isInteger(numQty)) {
|
|
1047
|
+
return { valid: false, error: "Quantity must be a whole number" };
|
|
1048
|
+
}
|
|
1049
|
+
return { valid: true };
|
|
1050
|
+
};
|
|
1051
|
+
var validateRating = (rating) => {
|
|
1052
|
+
const numRating = parseFloat(rating);
|
|
1053
|
+
if (isNaN(numRating)) {
|
|
1054
|
+
return { valid: false, error: "Rating must be a valid number" };
|
|
1055
|
+
}
|
|
1056
|
+
if (numRating < 0 || numRating > 5) {
|
|
1057
|
+
return { valid: false, error: "Rating must be between 0 and 5" };
|
|
1058
|
+
}
|
|
1059
|
+
return { valid: true };
|
|
1060
|
+
};
|
|
1061
|
+
var validateDiscountPercentage = (discount) => {
|
|
1062
|
+
const numDiscount = parseFloat(discount);
|
|
1063
|
+
if (isNaN(numDiscount)) {
|
|
1064
|
+
return { valid: false, error: "Discount must be a valid number" };
|
|
1065
|
+
}
|
|
1066
|
+
if (numDiscount < 0 || numDiscount > 100) {
|
|
1067
|
+
return { valid: false, error: "Discount percentage must be between 0 and 100" };
|
|
1068
|
+
}
|
|
1069
|
+
return { valid: true };
|
|
1070
|
+
};
|
|
1071
|
+
var validatePagination = (page, limit) => {
|
|
1072
|
+
const numPage = parseInt(page, 10) || 1;
|
|
1073
|
+
const numLimit = parseInt(limit, 10) || 10;
|
|
1074
|
+
if (numPage < 1) {
|
|
1075
|
+
return { valid: false, error: "Page must be greater than 0" };
|
|
1076
|
+
}
|
|
1077
|
+
if (numLimit < 1) {
|
|
1078
|
+
return { valid: false, error: "Limit must be greater than 0" };
|
|
1079
|
+
}
|
|
1080
|
+
if (numLimit > 100) {
|
|
1081
|
+
return { valid: false, error: "Limit cannot exceed 100" };
|
|
1082
|
+
}
|
|
1083
|
+
return { valid: true, page: numPage, limit: numLimit };
|
|
1084
|
+
};
|
|
1085
|
+
var isValidObjectId = (id) => {
|
|
1086
|
+
return /^[0-9a-fA-F]{24}$/.test(id);
|
|
1087
|
+
};
|
|
1088
|
+
var validateObjectId = (id, fieldName = "ID") => {
|
|
1089
|
+
if (!id) {
|
|
1090
|
+
return { valid: false, error: `${fieldName} is required` };
|
|
1091
|
+
}
|
|
1092
|
+
if (!isValidObjectId(id)) {
|
|
1093
|
+
return { valid: false, error: `Invalid ${fieldName} format` };
|
|
1094
|
+
}
|
|
1095
|
+
return { valid: true };
|
|
1096
|
+
};
|
|
1097
|
+
var isValidUrl = (url) => {
|
|
1098
|
+
return REGEX_PATTERNS.URL.test(url);
|
|
1099
|
+
};
|
|
1100
|
+
var validateUrl = (url) => {
|
|
1101
|
+
if (!url) {
|
|
1102
|
+
return { valid: false, error: "URL is required" };
|
|
1103
|
+
}
|
|
1104
|
+
if (!isValidUrl(url)) {
|
|
1105
|
+
return { valid: false, error: "Invalid URL format" };
|
|
1106
|
+
}
|
|
1107
|
+
return { valid: true };
|
|
1108
|
+
};
|
|
1109
|
+
var isValidSku = (sku) => {
|
|
1110
|
+
return REGEX_PATTERNS.PRODUCT_SKU.test(sku);
|
|
1111
|
+
};
|
|
1112
|
+
var validateSku = (sku) => {
|
|
1113
|
+
if (!sku) {
|
|
1114
|
+
return { valid: false, error: "SKU is required" };
|
|
1115
|
+
}
|
|
1116
|
+
if (!isValidSku(sku)) {
|
|
1117
|
+
return {
|
|
1118
|
+
valid: false,
|
|
1119
|
+
error: "Invalid SKU format (3-20 alphanumeric characters with hyphens)"
|
|
1120
|
+
};
|
|
1121
|
+
}
|
|
1122
|
+
return { valid: true };
|
|
1123
|
+
};
|
|
1124
|
+
var validateDate = (date) => {
|
|
1125
|
+
const dateObj = new Date(date);
|
|
1126
|
+
if (isNaN(dateObj.getTime())) {
|
|
1127
|
+
return { valid: false, error: "Invalid date format" };
|
|
1128
|
+
}
|
|
1129
|
+
return { valid: true };
|
|
1130
|
+
};
|
|
1131
|
+
var validateDateRange = (startDate, endDate) => {
|
|
1132
|
+
const start = new Date(startDate);
|
|
1133
|
+
const end = new Date(endDate);
|
|
1134
|
+
if (isNaN(start.getTime())) {
|
|
1135
|
+
return { valid: false, error: "Invalid start date" };
|
|
1136
|
+
}
|
|
1137
|
+
if (isNaN(end.getTime())) {
|
|
1138
|
+
return { valid: false, error: "Invalid end date" };
|
|
1139
|
+
}
|
|
1140
|
+
if (start > end) {
|
|
1141
|
+
return { valid: false, error: "Start date must be before end date" };
|
|
1142
|
+
}
|
|
1143
|
+
return { valid: true };
|
|
1144
|
+
};
|
|
1145
|
+
var batchValidate = (validations) => {
|
|
1146
|
+
const errors = [];
|
|
1147
|
+
for (const validation of validations) {
|
|
1148
|
+
if (!validation.valid && validation.error) {
|
|
1149
|
+
errors.push(validation.error);
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
return {
|
|
1153
|
+
valid: errors.length === 0,
|
|
1154
|
+
errors
|
|
1155
|
+
};
|
|
1156
|
+
};
|
|
1157
|
+
|
|
1158
|
+
// src/api/logger.client.ts
|
|
1159
|
+
var import_a_ecommerce_types = require("3a-ecommerce-types");
|
|
1160
|
+
var Logger = class {
|
|
1161
|
+
static configure(options) {
|
|
1162
|
+
if (options.maxLogs !== void 0) this.maxLogs = options.maxLogs;
|
|
1163
|
+
if (options.enableConsole !== void 0) this.enableConsole = options.enableConsole;
|
|
1164
|
+
}
|
|
1165
|
+
static addLog(entry) {
|
|
1166
|
+
this.logs.push(entry);
|
|
1167
|
+
if (this.logs.length > this.maxLogs) this.logs.shift();
|
|
1168
|
+
}
|
|
1169
|
+
static format(entry) {
|
|
1170
|
+
return `[${entry.timestamp}] [${entry.level}]${entry.context ? ` [${entry.context}]` : ""}: ${entry.message}`;
|
|
1171
|
+
}
|
|
1172
|
+
static debug(message, data, context) {
|
|
1173
|
+
this.log(import_a_ecommerce_types.LogLevel.DEBUG, message, data, context);
|
|
1174
|
+
}
|
|
1175
|
+
static info(message, data, context) {
|
|
1176
|
+
this.log(import_a_ecommerce_types.LogLevel.INFO, message, data, context);
|
|
1177
|
+
}
|
|
1178
|
+
static warn(message, data, context) {
|
|
1179
|
+
this.log(import_a_ecommerce_types.LogLevel.WARN, message, data, context);
|
|
1180
|
+
}
|
|
1181
|
+
static error(message, error, context) {
|
|
1182
|
+
this.log(import_a_ecommerce_types.LogLevel.ERROR, message, error, context);
|
|
1183
|
+
}
|
|
1184
|
+
static log(level, message, data, context) {
|
|
1185
|
+
const entry = {
|
|
1186
|
+
level,
|
|
1187
|
+
message,
|
|
1188
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1189
|
+
data,
|
|
1190
|
+
context
|
|
1191
|
+
};
|
|
1192
|
+
this.addLog(entry);
|
|
1193
|
+
if (!this.enableConsole) return;
|
|
1194
|
+
const formatted = this.format(entry);
|
|
1195
|
+
switch (level) {
|
|
1196
|
+
case import_a_ecommerce_types.LogLevel.ERROR:
|
|
1197
|
+
console.error(formatted, data ?? "");
|
|
1198
|
+
break;
|
|
1199
|
+
case import_a_ecommerce_types.LogLevel.WARN:
|
|
1200
|
+
console.warn(formatted, data ?? "");
|
|
1201
|
+
break;
|
|
1202
|
+
case import_a_ecommerce_types.LogLevel.INFO:
|
|
1203
|
+
console.info(formatted, data ?? "");
|
|
1204
|
+
break;
|
|
1205
|
+
default:
|
|
1206
|
+
console.debug(formatted, data ?? "");
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
static getLogs(level) {
|
|
1210
|
+
return level ? this.logs.filter((l) => l.level === level) : [...this.logs];
|
|
1211
|
+
}
|
|
1212
|
+
static clearLogs() {
|
|
1213
|
+
this.logs = [];
|
|
1214
|
+
}
|
|
1215
|
+
};
|
|
1216
|
+
Logger.logs = [];
|
|
1217
|
+
Logger.maxLogs = 1e3;
|
|
1218
|
+
Logger.enableConsole = true;
|
|
1219
|
+
|
|
1220
|
+
// src/api/user.queries.ts
|
|
1221
|
+
var GET_USERS_QUERY = `
|
|
1222
|
+
query GetUsers($page: Int, $limit: Int, $search: String, $role: String) {
|
|
1223
|
+
users(page: $page, limit: $limit, search: $search, role: $role) {
|
|
1224
|
+
users {
|
|
1225
|
+
id
|
|
1226
|
+
name
|
|
1227
|
+
email
|
|
1228
|
+
role
|
|
1229
|
+
isActive
|
|
1230
|
+
emailVerified
|
|
1231
|
+
createdAt
|
|
1232
|
+
lastLogin
|
|
1233
|
+
}
|
|
1234
|
+
pagination {
|
|
1235
|
+
page
|
|
1236
|
+
limit
|
|
1237
|
+
total
|
|
1238
|
+
pages
|
|
1239
|
+
sellerCount
|
|
1240
|
+
adminCount
|
|
1241
|
+
customerCount
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
`;
|
|
1246
|
+
var GET_USER_QUERY = `
|
|
1247
|
+
query GetUser($id: ID!) {
|
|
1248
|
+
user(id: $id) {
|
|
1249
|
+
id
|
|
1250
|
+
name
|
|
1251
|
+
email
|
|
1252
|
+
role
|
|
1253
|
+
isActive
|
|
1254
|
+
emailVerified
|
|
1255
|
+
createdAt
|
|
1256
|
+
lastLogin
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
`;
|
|
1260
|
+
var GET_USER_BY_ID_QUERY = `
|
|
1261
|
+
query GetUserById($id: ID!) {
|
|
1262
|
+
getUserById(id: $id) {
|
|
1263
|
+
user {
|
|
1264
|
+
id
|
|
1265
|
+
name
|
|
1266
|
+
email
|
|
1267
|
+
role
|
|
1268
|
+
isActive
|
|
1269
|
+
emailVerified
|
|
1270
|
+
createdAt
|
|
1271
|
+
lastLogin
|
|
1272
|
+
}
|
|
1273
|
+
accessToken
|
|
1274
|
+
refreshToken
|
|
1275
|
+
tokenExpiry
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
`;
|
|
1279
|
+
var GET_ME_QUERY = `
|
|
1280
|
+
query GetMe {
|
|
1281
|
+
me {
|
|
1282
|
+
id
|
|
1283
|
+
name
|
|
1284
|
+
email
|
|
1285
|
+
role
|
|
1286
|
+
isActive
|
|
1287
|
+
emailVerified
|
|
1288
|
+
createdAt
|
|
1289
|
+
lastLogin
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
`;
|
|
1293
|
+
var LOGIN_MUTATION = `
|
|
1294
|
+
mutation Login($input: LoginInput!) {
|
|
1295
|
+
login(input: $input) {
|
|
1296
|
+
user {
|
|
1297
|
+
id
|
|
1298
|
+
name
|
|
1299
|
+
email
|
|
1300
|
+
role
|
|
1301
|
+
isActive
|
|
1302
|
+
emailVerified
|
|
1303
|
+
createdAt
|
|
1304
|
+
}
|
|
1305
|
+
accessToken
|
|
1306
|
+
refreshToken
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
`;
|
|
1310
|
+
var REGISTER_MUTATION = `
|
|
1311
|
+
mutation Register($input: RegisterInput!) {
|
|
1312
|
+
register(input: $input) {
|
|
1313
|
+
user {
|
|
1314
|
+
id
|
|
1315
|
+
name
|
|
1316
|
+
email
|
|
1317
|
+
role
|
|
1318
|
+
isActive
|
|
1319
|
+
emailVerified
|
|
1320
|
+
createdAt
|
|
1321
|
+
}
|
|
1322
|
+
accessToken
|
|
1323
|
+
refreshToken
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
`;
|
|
1327
|
+
var GOOGLE_AUTH_MUTATION = `
|
|
1328
|
+
mutation GoogleAuth($input: GoogleAuthInput!) {
|
|
1329
|
+
googleAuth(input: $input) {
|
|
1330
|
+
user {
|
|
1331
|
+
id
|
|
1332
|
+
name
|
|
1333
|
+
email
|
|
1334
|
+
role
|
|
1335
|
+
isActive
|
|
1336
|
+
emailVerified
|
|
1337
|
+
createdAt
|
|
1338
|
+
profilePicture
|
|
1339
|
+
}
|
|
1340
|
+
accessToken
|
|
1341
|
+
refreshToken
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
`;
|
|
1345
|
+
var LOGOUT_MUTATION = `
|
|
1346
|
+
mutation Logout {
|
|
1347
|
+
logout
|
|
1348
|
+
}
|
|
1349
|
+
`;
|
|
1350
|
+
var UPDATE_USER_ROLE_MUTATION = `
|
|
1351
|
+
mutation UpdateUserRole($id: ID!, $role: String!) {
|
|
1352
|
+
updateUserRole(id: $id, role: $role) {
|
|
1353
|
+
id
|
|
1354
|
+
name
|
|
1355
|
+
email
|
|
1356
|
+
role
|
|
1357
|
+
isActive
|
|
1358
|
+
emailVerified
|
|
1359
|
+
createdAt
|
|
1360
|
+
lastLogin
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
`;
|
|
1364
|
+
var DELETE_USER_MUTATION = `
|
|
1365
|
+
mutation DeleteUser($id: ID!) {
|
|
1366
|
+
deleteUser(id: $id)
|
|
1367
|
+
}
|
|
1368
|
+
`;
|
|
1369
|
+
var SEND_VERIFICATION_EMAIL_MUTATION = `
|
|
1370
|
+
mutation SendVerificationEmail($source: String) {
|
|
1371
|
+
sendVerificationEmail(source: $source) {
|
|
1372
|
+
success
|
|
1373
|
+
message
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
`;
|
|
1377
|
+
var VERIFY_EMAIL_MUTATION = `
|
|
1378
|
+
mutation VerifyEmail {
|
|
1379
|
+
verifyEmail {
|
|
1380
|
+
success
|
|
1381
|
+
message
|
|
1382
|
+
user {
|
|
1383
|
+
id
|
|
1384
|
+
name
|
|
1385
|
+
email
|
|
1386
|
+
role
|
|
1387
|
+
isActive
|
|
1388
|
+
emailVerified
|
|
1389
|
+
createdAt
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
1393
|
+
`;
|
|
1394
|
+
var FORGOT_PASSWORD_MUTATION = `
|
|
1395
|
+
mutation ForgotPassword($email: String!, $role: String!) {
|
|
1396
|
+
forgotPassword(email: $email, role: $role) {
|
|
1397
|
+
success
|
|
1398
|
+
message
|
|
1399
|
+
resetToken
|
|
1400
|
+
resetUrl
|
|
1401
|
+
}
|
|
1402
|
+
}
|
|
1403
|
+
`;
|
|
1404
|
+
var RESET_PASSWORD_MUTATION = `
|
|
1405
|
+
mutation ResetPassword($token: String!, $password: String!, $confirmPassword: String!) {
|
|
1406
|
+
resetPassword(token: $token, password: $password, confirmPassword: $confirmPassword) {
|
|
1407
|
+
success
|
|
1408
|
+
message
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
`;
|
|
1412
|
+
var VALIDATE_RESET_TOKEN_QUERY = `
|
|
1413
|
+
query ValidateResetToken($token: String!) {
|
|
1414
|
+
validateResetToken(token: $token) {
|
|
1415
|
+
success
|
|
1416
|
+
message
|
|
1417
|
+
email
|
|
1418
|
+
}
|
|
1419
|
+
}
|
|
1420
|
+
`;
|
|
1421
|
+
var UPDATE_PROFILE_MUTATION = `
|
|
1422
|
+
mutation UpdateProfile($input: UpdateProfileInput!) {
|
|
1423
|
+
updateProfile(input: $input) {
|
|
1424
|
+
success
|
|
1425
|
+
message
|
|
1426
|
+
user {
|
|
1427
|
+
id
|
|
1428
|
+
name
|
|
1429
|
+
email
|
|
1430
|
+
role
|
|
1431
|
+
isActive
|
|
1432
|
+
emailVerified
|
|
1433
|
+
createdAt
|
|
1434
|
+
}
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1437
|
+
`;
|
|
1438
|
+
|
|
1439
|
+
// src/api/product.queries.ts
|
|
1440
|
+
var GET_PRODUCTS_QUERY = `
|
|
1441
|
+
query GetProducts($page: Int, $limit: Int, $search: String, $category: String, $minPrice: Float, $maxPrice: Float, $sortBy: String, $sortOrder: String, $featured: Boolean, $includeInactive: Boolean) {
|
|
1442
|
+
products(page: $page, limit: $limit, search: $search, category: $category, minPrice: $minPrice, maxPrice: $maxPrice, sortBy: $sortBy, sortOrder: $sortOrder, featured: $featured, includeInactive: $includeInactive) {
|
|
1443
|
+
products {
|
|
1444
|
+
id
|
|
1445
|
+
name
|
|
1446
|
+
description
|
|
1447
|
+
price
|
|
1448
|
+
stock
|
|
1449
|
+
category
|
|
1450
|
+
sellerId
|
|
1451
|
+
isActive
|
|
1452
|
+
imageUrl
|
|
1453
|
+
tags
|
|
1454
|
+
rating
|
|
1455
|
+
reviewCount
|
|
1456
|
+
createdAt
|
|
1457
|
+
updatedAt
|
|
1458
|
+
}
|
|
1459
|
+
pagination {
|
|
1460
|
+
page
|
|
1461
|
+
limit
|
|
1462
|
+
total
|
|
1463
|
+
pages
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
`;
|
|
1468
|
+
var GET_PRODUCT_QUERY = `
|
|
1469
|
+
query GetProduct($id: ID!) {
|
|
1470
|
+
product(id: $id) {
|
|
1471
|
+
id
|
|
1472
|
+
name
|
|
1473
|
+
description
|
|
1474
|
+
price
|
|
1475
|
+
stock
|
|
1476
|
+
category
|
|
1477
|
+
sellerId
|
|
1478
|
+
seller {
|
|
1479
|
+
id
|
|
1480
|
+
name
|
|
1481
|
+
email
|
|
1482
|
+
}
|
|
1483
|
+
isActive
|
|
1484
|
+
imageUrl
|
|
1485
|
+
tags
|
|
1486
|
+
rating
|
|
1487
|
+
reviewCount
|
|
1488
|
+
createdAt
|
|
1489
|
+
updatedAt
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1492
|
+
`;
|
|
1493
|
+
var GET_PRODUCTS_BY_SELLER_QUERY = `
|
|
1494
|
+
query GetProductsBySeller($sellerId: String!) {
|
|
1495
|
+
productsBySeller(sellerId: $sellerId) {
|
|
1496
|
+
id
|
|
1497
|
+
name
|
|
1498
|
+
description
|
|
1499
|
+
price
|
|
1500
|
+
stock
|
|
1501
|
+
category
|
|
1502
|
+
sellerId
|
|
1503
|
+
isActive
|
|
1504
|
+
imageUrl
|
|
1505
|
+
tags
|
|
1506
|
+
rating
|
|
1507
|
+
reviewCount
|
|
1508
|
+
createdAt
|
|
1509
|
+
updatedAt
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
`;
|
|
1513
|
+
var CREATE_PRODUCT_MUTATION = `
|
|
1514
|
+
mutation CreateProduct($input: CreateProductInput!) {
|
|
1515
|
+
createProduct(input: $input) {
|
|
1516
|
+
id
|
|
1517
|
+
name
|
|
1518
|
+
description
|
|
1519
|
+
price
|
|
1520
|
+
stock
|
|
1521
|
+
category
|
|
1522
|
+
sellerId
|
|
1523
|
+
isActive
|
|
1524
|
+
imageUrl
|
|
1525
|
+
tags
|
|
1526
|
+
rating
|
|
1527
|
+
reviewCount
|
|
1528
|
+
createdAt
|
|
1529
|
+
updatedAt
|
|
1530
|
+
}
|
|
1531
|
+
}
|
|
1532
|
+
`;
|
|
1533
|
+
var UPDATE_PRODUCT_MUTATION = `
|
|
1534
|
+
mutation UpdateProduct($id: ID!, $input: UpdateProductInput!) {
|
|
1535
|
+
updateProduct(id: $id, input: $input) {
|
|
1536
|
+
id
|
|
1537
|
+
name
|
|
1538
|
+
description
|
|
1539
|
+
price
|
|
1540
|
+
stock
|
|
1541
|
+
category
|
|
1542
|
+
sellerId
|
|
1543
|
+
isActive
|
|
1544
|
+
imageUrl
|
|
1545
|
+
tags
|
|
1546
|
+
rating
|
|
1547
|
+
reviewCount
|
|
1548
|
+
createdAt
|
|
1549
|
+
updatedAt
|
|
1550
|
+
}
|
|
1551
|
+
}
|
|
1552
|
+
`;
|
|
1553
|
+
var DELETE_PRODUCT_MUTATION = `
|
|
1554
|
+
mutation DeleteProduct($id: ID!) {
|
|
1555
|
+
deleteProduct(id: $id)
|
|
1556
|
+
}
|
|
1557
|
+
`;
|
|
1558
|
+
var SEARCH_PRODUCTS_QUERY = `
|
|
1559
|
+
query SearchProducts($search: String!, $limit: Int) {
|
|
1560
|
+
searchProducts(search: $search, limit: $limit) {
|
|
1561
|
+
id
|
|
1562
|
+
name
|
|
1563
|
+
description
|
|
1564
|
+
price
|
|
1565
|
+
stock
|
|
1566
|
+
category
|
|
1567
|
+
sellerId
|
|
1568
|
+
isActive
|
|
1569
|
+
imageUrl
|
|
1570
|
+
tags
|
|
1571
|
+
rating
|
|
1572
|
+
reviewCount
|
|
1573
|
+
createdAt
|
|
1574
|
+
updatedAt
|
|
1575
|
+
}
|
|
1576
|
+
}
|
|
1577
|
+
`;
|
|
1578
|
+
|
|
1579
|
+
// src/api/order.queries.ts
|
|
1580
|
+
var GET_ORDERS_QUERY = `
|
|
1581
|
+
query GetOrders($page: Int, $limit: Int, $customerId: String) {
|
|
1582
|
+
orders(page: $page, limit: $limit, customerId: $customerId) {
|
|
1583
|
+
orders {
|
|
1584
|
+
id
|
|
1585
|
+
orderNumber
|
|
1586
|
+
customerId
|
|
1587
|
+
customerEmail
|
|
1588
|
+
items {
|
|
1589
|
+
productId
|
|
1590
|
+
productName
|
|
1591
|
+
quantity
|
|
1592
|
+
price
|
|
1593
|
+
subtotal
|
|
1594
|
+
}
|
|
1595
|
+
subtotal
|
|
1596
|
+
tax
|
|
1597
|
+
shipping
|
|
1598
|
+
discount
|
|
1599
|
+
total
|
|
1600
|
+
orderStatus
|
|
1601
|
+
paymentStatus
|
|
1602
|
+
paymentMethod
|
|
1603
|
+
shippingAddress {
|
|
1604
|
+
street
|
|
1605
|
+
city
|
|
1606
|
+
state
|
|
1607
|
+
zip
|
|
1608
|
+
country
|
|
1609
|
+
}
|
|
1610
|
+
notes
|
|
1611
|
+
createdAt
|
|
1612
|
+
updatedAt
|
|
1613
|
+
}
|
|
1614
|
+
pagination {
|
|
1615
|
+
page
|
|
1616
|
+
limit
|
|
1617
|
+
total
|
|
1618
|
+
pages
|
|
1619
|
+
}
|
|
1620
|
+
}
|
|
1621
|
+
}
|
|
1622
|
+
`;
|
|
1623
|
+
var GET_ORDER_QUERY = `
|
|
1624
|
+
query GetOrder($id: ID!) {
|
|
1625
|
+
order(id: $id) {
|
|
1626
|
+
id
|
|
1627
|
+
orderNumber
|
|
1628
|
+
customerId
|
|
1629
|
+
customerEmail
|
|
1630
|
+
items {
|
|
1631
|
+
productId
|
|
1632
|
+
productName
|
|
1633
|
+
quantity
|
|
1634
|
+
price
|
|
1635
|
+
subtotal
|
|
1636
|
+
}
|
|
1637
|
+
subtotal
|
|
1638
|
+
tax
|
|
1639
|
+
shipping
|
|
1640
|
+
total
|
|
1641
|
+
orderStatus
|
|
1642
|
+
paymentStatus
|
|
1643
|
+
paymentMethod
|
|
1644
|
+
shippingAddress {
|
|
1645
|
+
street
|
|
1646
|
+
city
|
|
1647
|
+
state
|
|
1648
|
+
zip
|
|
1649
|
+
country
|
|
1650
|
+
}
|
|
1651
|
+
notes
|
|
1652
|
+
createdAt
|
|
1653
|
+
updatedAt
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
`;
|
|
1657
|
+
var GET_ORDERS_BY_CUSTOMER_QUERY = `
|
|
1658
|
+
query GetOrdersByCustomer($customerId: String!) {
|
|
1659
|
+
ordersByCustomer(customerId: $customerId) {
|
|
1660
|
+
id
|
|
1661
|
+
orderNumber
|
|
1662
|
+
customerId
|
|
1663
|
+
customerEmail
|
|
1664
|
+
items {
|
|
1665
|
+
productId
|
|
1666
|
+
productName
|
|
1667
|
+
quantity
|
|
1668
|
+
price
|
|
1669
|
+
subtotal
|
|
1670
|
+
}
|
|
1671
|
+
subtotal
|
|
1672
|
+
tax
|
|
1673
|
+
shipping
|
|
1674
|
+
total
|
|
1675
|
+
orderStatus
|
|
1676
|
+
paymentStatus
|
|
1677
|
+
paymentMethod
|
|
1678
|
+
shippingAddress {
|
|
1679
|
+
street
|
|
1680
|
+
city
|
|
1681
|
+
state
|
|
1682
|
+
zip
|
|
1683
|
+
country
|
|
1684
|
+
}
|
|
1685
|
+
notes
|
|
1686
|
+
createdAt
|
|
1687
|
+
updatedAt
|
|
1688
|
+
}
|
|
1689
|
+
}
|
|
1690
|
+
`;
|
|
1691
|
+
var CREATE_ORDER_MUTATION = `
|
|
1692
|
+
mutation CreateOrder($input: CreateOrderInput!) {
|
|
1693
|
+
createOrder(input: $input) {
|
|
1694
|
+
order {
|
|
1695
|
+
id
|
|
1696
|
+
orderNumber
|
|
1697
|
+
customerId
|
|
1698
|
+
customerEmail
|
|
1699
|
+
sellerId
|
|
1700
|
+
items {
|
|
1701
|
+
productId
|
|
1702
|
+
productName
|
|
1703
|
+
quantity
|
|
1704
|
+
price
|
|
1705
|
+
sellerId
|
|
1706
|
+
subtotal
|
|
1707
|
+
}
|
|
1708
|
+
subtotal
|
|
1709
|
+
tax
|
|
1710
|
+
shipping
|
|
1711
|
+
discount
|
|
1712
|
+
couponCode
|
|
1713
|
+
total
|
|
1714
|
+
orderStatus
|
|
1715
|
+
paymentStatus
|
|
1716
|
+
paymentMethod
|
|
1717
|
+
shippingAddress {
|
|
1718
|
+
street
|
|
1719
|
+
city
|
|
1720
|
+
state
|
|
1721
|
+
zip
|
|
1722
|
+
country
|
|
1723
|
+
}
|
|
1724
|
+
notes
|
|
1725
|
+
createdAt
|
|
1726
|
+
updatedAt
|
|
1727
|
+
}
|
|
1728
|
+
orders {
|
|
1729
|
+
id
|
|
1730
|
+
orderNumber
|
|
1731
|
+
customerId
|
|
1732
|
+
customerEmail
|
|
1733
|
+
sellerId
|
|
1734
|
+
items {
|
|
1735
|
+
productId
|
|
1736
|
+
productName
|
|
1737
|
+
quantity
|
|
1738
|
+
price
|
|
1739
|
+
sellerId
|
|
1740
|
+
subtotal
|
|
1741
|
+
}
|
|
1742
|
+
subtotal
|
|
1743
|
+
tax
|
|
1744
|
+
shipping
|
|
1745
|
+
discount
|
|
1746
|
+
total
|
|
1747
|
+
orderStatus
|
|
1748
|
+
paymentStatus
|
|
1749
|
+
createdAt
|
|
1750
|
+
}
|
|
1751
|
+
orderCount
|
|
1752
|
+
}
|
|
1753
|
+
}
|
|
1754
|
+
`;
|
|
1755
|
+
var UPDATE_ORDER_STATUS_MUTATION = `
|
|
1756
|
+
mutation UpdateOrderStatus($id: ID!, $status: OrderStatus!) {
|
|
1757
|
+
updateOrderStatus(id: $id, status: $status) {
|
|
1758
|
+
id
|
|
1759
|
+
orderNumber
|
|
1760
|
+
orderStatus
|
|
1761
|
+
updatedAt
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
`;
|
|
1765
|
+
var UPDATE_PAYMENT_STATUS_MUTATION = `
|
|
1766
|
+
mutation UpdatePaymentStatus($id: ID!, $status: PaymentStatus!) {
|
|
1767
|
+
updatePaymentStatus(id: $id, status: $status) {
|
|
1768
|
+
id
|
|
1769
|
+
orderNumber
|
|
1770
|
+
paymentStatus
|
|
1771
|
+
updatedAt
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
`;
|
|
1775
|
+
var CANCEL_ORDER_MUTATION = `
|
|
1776
|
+
mutation CancelOrder($id: ID!) {
|
|
1777
|
+
cancelOrder(id: $id) {
|
|
1778
|
+
id
|
|
1779
|
+
orderNumber
|
|
1780
|
+
orderStatus
|
|
1781
|
+
updatedAt
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1784
|
+
`;
|
|
1785
|
+
|
|
1786
|
+
// src/api/coupon.queries.ts
|
|
1787
|
+
var GET_COUPONS_QUERY = `
|
|
1788
|
+
query GetCoupons($page: Int, $limit: Int, $isActive: Boolean, $search: String) {
|
|
1789
|
+
coupons(page: $page, limit: $limit, isActive: $isActive, search: $search) {
|
|
1790
|
+
coupons {
|
|
1791
|
+
id
|
|
1792
|
+
code
|
|
1793
|
+
description
|
|
1794
|
+
discountType
|
|
1795
|
+
discount
|
|
1796
|
+
minPurchase
|
|
1797
|
+
maxDiscount
|
|
1798
|
+
validFrom
|
|
1799
|
+
validTo
|
|
1800
|
+
usageLimit
|
|
1801
|
+
usageCount
|
|
1802
|
+
isActive
|
|
1803
|
+
createdAt
|
|
1804
|
+
updatedAt
|
|
1805
|
+
}
|
|
1806
|
+
pagination {
|
|
1807
|
+
page
|
|
1808
|
+
limit
|
|
1809
|
+
total
|
|
1810
|
+
pages
|
|
1811
|
+
}
|
|
1812
|
+
}
|
|
1813
|
+
}
|
|
1814
|
+
`;
|
|
1815
|
+
var GET_COUPON_QUERY = `
|
|
1816
|
+
query GetCoupon($id: ID!) {
|
|
1817
|
+
coupon(id: $id) {
|
|
1818
|
+
id
|
|
1819
|
+
code
|
|
1820
|
+
description
|
|
1821
|
+
discountType
|
|
1822
|
+
discount
|
|
1823
|
+
minPurchase
|
|
1824
|
+
maxDiscount
|
|
1825
|
+
validFrom
|
|
1826
|
+
validTo
|
|
1827
|
+
usageLimit
|
|
1828
|
+
usageCount
|
|
1829
|
+
isActive
|
|
1830
|
+
createdAt
|
|
1831
|
+
updatedAt
|
|
1832
|
+
}
|
|
1833
|
+
}
|
|
1834
|
+
`;
|
|
1835
|
+
var VALIDATE_COUPON_QUERY = `
|
|
1836
|
+
query ValidateCoupon($code: String!, $orderTotal: Float!) {
|
|
1837
|
+
validateCoupon(code: $code, orderTotal: $orderTotal) {
|
|
1838
|
+
valid
|
|
1839
|
+
discount
|
|
1840
|
+
discountValue
|
|
1841
|
+
finalTotal
|
|
1842
|
+
discountType
|
|
1843
|
+
message
|
|
1844
|
+
code
|
|
1845
|
+
}
|
|
1846
|
+
}
|
|
1847
|
+
`;
|
|
1848
|
+
var CREATE_COUPON_MUTATION = `
|
|
1849
|
+
mutation CreateCoupon($input: CreateCouponInput!) {
|
|
1850
|
+
createCoupon(input: $input) {
|
|
1851
|
+
id
|
|
1852
|
+
code
|
|
1853
|
+
description
|
|
1854
|
+
discountType
|
|
1855
|
+
discount
|
|
1856
|
+
minPurchase
|
|
1857
|
+
maxDiscount
|
|
1858
|
+
validFrom
|
|
1859
|
+
validTo
|
|
1860
|
+
usageLimit
|
|
1861
|
+
usageCount
|
|
1862
|
+
isActive
|
|
1863
|
+
createdAt
|
|
1864
|
+
updatedAt
|
|
1865
|
+
}
|
|
1866
|
+
}
|
|
1867
|
+
`;
|
|
1868
|
+
var UPDATE_COUPON_MUTATION = `
|
|
1869
|
+
mutation UpdateCoupon($id: ID!, $input: UpdateCouponInput!) {
|
|
1870
|
+
updateCoupon(id: $id, input: $input) {
|
|
1871
|
+
id
|
|
1872
|
+
code
|
|
1873
|
+
description
|
|
1874
|
+
discountType
|
|
1875
|
+
discount
|
|
1876
|
+
minPurchase
|
|
1877
|
+
maxDiscount
|
|
1878
|
+
validFrom
|
|
1879
|
+
validTo
|
|
1880
|
+
usageLimit
|
|
1881
|
+
usageCount
|
|
1882
|
+
isActive
|
|
1883
|
+
createdAt
|
|
1884
|
+
updatedAt
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
`;
|
|
1888
|
+
var DELETE_COUPON_MUTATION = `
|
|
1889
|
+
mutation DeleteCoupon($id: ID!) {
|
|
1890
|
+
deleteCoupon(id: $id)
|
|
1891
|
+
}
|
|
1892
|
+
`;
|
|
1893
|
+
var TOGGLE_COUPON_STATUS_MUTATION = `
|
|
1894
|
+
mutation ToggleCouponStatus($id: ID!) {
|
|
1895
|
+
toggleCouponStatus(id: $id) {
|
|
1896
|
+
id
|
|
1897
|
+
isActive
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1900
|
+
`;
|
|
1901
|
+
|
|
1902
|
+
// src/api/category.queries.ts
|
|
1903
|
+
var GET_CATEGORIES_QUERY = `
|
|
1904
|
+
query GetCategories($filter: CategoryFilterInput) {
|
|
1905
|
+
categories(filter: $filter) {
|
|
1906
|
+
success
|
|
1907
|
+
message
|
|
1908
|
+
data {
|
|
1909
|
+
id
|
|
1910
|
+
name
|
|
1911
|
+
description
|
|
1912
|
+
icon
|
|
1913
|
+
slug
|
|
1914
|
+
isActive
|
|
1915
|
+
productCount
|
|
1916
|
+
createdAt
|
|
1917
|
+
updatedAt
|
|
1918
|
+
}
|
|
1919
|
+
count
|
|
1920
|
+
}
|
|
1921
|
+
}
|
|
1922
|
+
`;
|
|
1923
|
+
var GET_CATEGORY_QUERY = `
|
|
1924
|
+
query GetCategory($id: String!) {
|
|
1925
|
+
category(id: $id) {
|
|
1926
|
+
id
|
|
1927
|
+
name
|
|
1928
|
+
description
|
|
1929
|
+
icon
|
|
1930
|
+
slug
|
|
1931
|
+
isActive
|
|
1932
|
+
productCount
|
|
1933
|
+
createdAt
|
|
1934
|
+
updatedAt
|
|
1935
|
+
}
|
|
1936
|
+
}
|
|
1937
|
+
`;
|
|
1938
|
+
var CREATE_CATEGORY_MUTATION = `
|
|
1939
|
+
mutation CreateCategory($input: CategoryInput!) {
|
|
1940
|
+
createCategory(input: $input) {
|
|
1941
|
+
success
|
|
1942
|
+
message
|
|
1943
|
+
data {
|
|
1944
|
+
id
|
|
1945
|
+
name
|
|
1946
|
+
description
|
|
1947
|
+
icon
|
|
1948
|
+
slug
|
|
1949
|
+
isActive
|
|
1950
|
+
productCount
|
|
1951
|
+
createdAt
|
|
1952
|
+
updatedAt
|
|
1953
|
+
}
|
|
1954
|
+
}
|
|
1955
|
+
}
|
|
1956
|
+
`;
|
|
1957
|
+
var UPDATE_CATEGORY_MUTATION = `
|
|
1958
|
+
mutation UpdateCategory($id: ID!, $input: CategoryInput!) {
|
|
1959
|
+
updateCategory(id: $id, input: $input) {
|
|
1960
|
+
success
|
|
1961
|
+
message
|
|
1962
|
+
data {
|
|
1963
|
+
id
|
|
1964
|
+
name
|
|
1965
|
+
description
|
|
1966
|
+
icon
|
|
1967
|
+
slug
|
|
1968
|
+
isActive
|
|
1969
|
+
productCount
|
|
1970
|
+
createdAt
|
|
1971
|
+
updatedAt
|
|
1972
|
+
}
|
|
1973
|
+
}
|
|
1974
|
+
}
|
|
1975
|
+
`;
|
|
1976
|
+
var DELETE_CATEGORY_MUTATION = `
|
|
1977
|
+
mutation DeleteCategory($id: ID!) {
|
|
1978
|
+
deleteCategory(id: $id) {
|
|
1979
|
+
success
|
|
1980
|
+
message
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1983
|
+
`;
|
|
1984
|
+
|
|
1985
|
+
// src/api/dashboard.queries.ts
|
|
1986
|
+
var DASHBOARD_STATS_QUERY = `
|
|
1987
|
+
query GetDashboardStats {
|
|
1988
|
+
dashboardStats {
|
|
1989
|
+
totalUsers
|
|
1990
|
+
totalOrders
|
|
1991
|
+
totalRevenue
|
|
1992
|
+
pendingOrders
|
|
1993
|
+
}
|
|
1994
|
+
}
|
|
1995
|
+
`;
|
|
1996
|
+
var SALES_ANALYTICS_QUERY = `
|
|
1997
|
+
query GetSalesAnalytics($period: String!) {
|
|
1998
|
+
salesAnalytics(period: $period) {
|
|
1999
|
+
daily {
|
|
2000
|
+
date
|
|
2001
|
+
sales
|
|
2002
|
+
orders
|
|
2003
|
+
revenue
|
|
2004
|
+
}
|
|
2005
|
+
weekly {
|
|
2006
|
+
date
|
|
2007
|
+
sales
|
|
2008
|
+
orders
|
|
2009
|
+
revenue
|
|
2010
|
+
}
|
|
2011
|
+
monthly {
|
|
2012
|
+
date
|
|
2013
|
+
sales
|
|
2014
|
+
orders
|
|
2015
|
+
revenue
|
|
2016
|
+
}
|
|
2017
|
+
}
|
|
2018
|
+
}
|
|
2019
|
+
`;
|
|
2020
|
+
|
|
2021
|
+
// src/api/review.queries.ts
|
|
2022
|
+
var GET_PRODUCT_REVIEWS_QUERY = `
|
|
2023
|
+
query GetProductReviews($productId: ID!, $page: Int, $limit: Int) {
|
|
2024
|
+
productReviews(productId: $productId, page: $page, limit: $limit) {
|
|
2025
|
+
reviews {
|
|
2026
|
+
id
|
|
2027
|
+
productId
|
|
2028
|
+
userId
|
|
2029
|
+
userName
|
|
2030
|
+
rating
|
|
2031
|
+
comment
|
|
2032
|
+
helpful
|
|
2033
|
+
createdAt
|
|
2034
|
+
}
|
|
2035
|
+
pagination {
|
|
2036
|
+
page
|
|
2037
|
+
limit
|
|
2038
|
+
total
|
|
2039
|
+
pages
|
|
2040
|
+
}
|
|
2041
|
+
}
|
|
2042
|
+
}
|
|
2043
|
+
`;
|
|
2044
|
+
var CREATE_REVIEW_MUTATION = `
|
|
2045
|
+
mutation CreateReview($productId: ID!, $input: CreateReviewInput!) {
|
|
2046
|
+
createReview(productId: $productId, input: $input) {
|
|
2047
|
+
success
|
|
2048
|
+
message
|
|
2049
|
+
review {
|
|
2050
|
+
id
|
|
2051
|
+
productId
|
|
2052
|
+
userId
|
|
2053
|
+
userName
|
|
2054
|
+
rating
|
|
2055
|
+
comment
|
|
2056
|
+
helpful
|
|
2057
|
+
createdAt
|
|
2058
|
+
}
|
|
2059
|
+
}
|
|
2060
|
+
}
|
|
2061
|
+
`;
|
|
2062
|
+
var MARK_REVIEW_HELPFUL_MUTATION = `
|
|
2063
|
+
mutation MarkReviewHelpful($reviewId: ID!) {
|
|
2064
|
+
markReviewHelpful(reviewId: $reviewId) {
|
|
2065
|
+
id
|
|
2066
|
+
helpful
|
|
2067
|
+
}
|
|
2068
|
+
}
|
|
2069
|
+
`;
|
|
2070
|
+
var DELETE_REVIEW_MUTATION = `
|
|
2071
|
+
mutation DeleteReview($reviewId: ID!) {
|
|
2072
|
+
deleteReview(reviewId: $reviewId)
|
|
2073
|
+
}
|
|
2074
|
+
`;
|
|
2075
|
+
|
|
2076
|
+
// src/api/address.queries.ts
|
|
2077
|
+
var GET_MY_ADDRESSES_QUERY = `
|
|
2078
|
+
query GetMyAddresses {
|
|
2079
|
+
myAddresses {
|
|
2080
|
+
addresses {
|
|
2081
|
+
id
|
|
2082
|
+
userId
|
|
2083
|
+
street
|
|
2084
|
+
city
|
|
2085
|
+
state
|
|
2086
|
+
zip
|
|
2087
|
+
country
|
|
2088
|
+
isDefault
|
|
2089
|
+
label
|
|
2090
|
+
createdAt
|
|
2091
|
+
updatedAt
|
|
2092
|
+
}
|
|
2093
|
+
}
|
|
2094
|
+
}
|
|
2095
|
+
`;
|
|
2096
|
+
var ADD_ADDRESS_MUTATION = `
|
|
2097
|
+
mutation AddAddress($input: AddAddressInput!) {
|
|
2098
|
+
addAddress(input: $input) {
|
|
2099
|
+
success
|
|
2100
|
+
message
|
|
2101
|
+
address {
|
|
2102
|
+
id
|
|
2103
|
+
userId
|
|
2104
|
+
street
|
|
2105
|
+
city
|
|
2106
|
+
state
|
|
2107
|
+
zip
|
|
2108
|
+
country
|
|
2109
|
+
isDefault
|
|
2110
|
+
label
|
|
2111
|
+
createdAt
|
|
2112
|
+
updatedAt
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2115
|
+
}
|
|
2116
|
+
`;
|
|
2117
|
+
var UPDATE_ADDRESS_MUTATION = `
|
|
2118
|
+
mutation UpdateAddress($id: ID!, $input: UpdateAddressInput!) {
|
|
2119
|
+
updateAddress(id: $id, input: $input) {
|
|
2120
|
+
success
|
|
2121
|
+
message
|
|
2122
|
+
address {
|
|
2123
|
+
id
|
|
2124
|
+
userId
|
|
2125
|
+
street
|
|
2126
|
+
city
|
|
2127
|
+
state
|
|
2128
|
+
zip
|
|
2129
|
+
country
|
|
2130
|
+
isDefault
|
|
2131
|
+
label
|
|
2132
|
+
createdAt
|
|
2133
|
+
updatedAt
|
|
2134
|
+
}
|
|
2135
|
+
}
|
|
2136
|
+
}
|
|
2137
|
+
`;
|
|
2138
|
+
var DELETE_ADDRESS_MUTATION = `
|
|
2139
|
+
mutation DeleteAddress($id: ID!) {
|
|
2140
|
+
deleteAddress(id: $id) {
|
|
2141
|
+
success
|
|
2142
|
+
message
|
|
2143
|
+
}
|
|
2144
|
+
}
|
|
2145
|
+
`;
|
|
2146
|
+
var SET_DEFAULT_ADDRESS_MUTATION = `
|
|
2147
|
+
mutation SetDefaultAddress($id: ID!) {
|
|
2148
|
+
setDefaultAddress(id: $id) {
|
|
2149
|
+
success
|
|
2150
|
+
message
|
|
2151
|
+
address {
|
|
2152
|
+
id
|
|
2153
|
+
userId
|
|
2154
|
+
street
|
|
2155
|
+
city
|
|
2156
|
+
state
|
|
2157
|
+
zip
|
|
2158
|
+
country
|
|
2159
|
+
isDefault
|
|
2160
|
+
label
|
|
2161
|
+
createdAt
|
|
2162
|
+
updatedAt
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
}
|
|
2166
|
+
`;
|
|
2167
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
2168
|
+
0 && (module.exports = {
|
|
2169
|
+
ADD_ADDRESS_MUTATION,
|
|
2170
|
+
ADMIN_APP_URL,
|
|
2171
|
+
API_ENDPOINTS,
|
|
2172
|
+
AUTH_COOKIE_NAMES,
|
|
2173
|
+
CACHE_CONFIG,
|
|
2174
|
+
CANCEL_ORDER_MUTATION,
|
|
2175
|
+
COUPON_CONFIG,
|
|
2176
|
+
CREATE_CATEGORY_MUTATION,
|
|
2177
|
+
CREATE_COUPON_MUTATION,
|
|
2178
|
+
CREATE_ORDER_MUTATION,
|
|
2179
|
+
CREATE_PRODUCT_MUTATION,
|
|
2180
|
+
CREATE_REVIEW_MUTATION,
|
|
2181
|
+
DASHBOARD_STATS_QUERY,
|
|
2182
|
+
DATABASE_CONFIG,
|
|
2183
|
+
DEFAULT_CORS_ORIGINS,
|
|
2184
|
+
DELETE_ADDRESS_MUTATION,
|
|
2185
|
+
DELETE_CATEGORY_MUTATION,
|
|
2186
|
+
DELETE_COUPON_MUTATION,
|
|
2187
|
+
DELETE_PRODUCT_MUTATION,
|
|
2188
|
+
DELETE_REVIEW_MUTATION,
|
|
2189
|
+
DELETE_USER_MUTATION,
|
|
2190
|
+
ENV_PRESETS,
|
|
2191
|
+
ERROR_MESSAGES,
|
|
2192
|
+
FORGOT_PASSWORD_MUTATION,
|
|
2193
|
+
GET_CATEGORIES_QUERY,
|
|
2194
|
+
GET_CATEGORY_QUERY,
|
|
2195
|
+
GET_COUPONS_QUERY,
|
|
2196
|
+
GET_COUPON_QUERY,
|
|
2197
|
+
GET_ME_QUERY,
|
|
2198
|
+
GET_MY_ADDRESSES_QUERY,
|
|
2199
|
+
GET_ORDERS_BY_CUSTOMER_QUERY,
|
|
2200
|
+
GET_ORDERS_QUERY,
|
|
2201
|
+
GET_ORDER_QUERY,
|
|
2202
|
+
GET_PRODUCTS_BY_SELLER_QUERY,
|
|
2203
|
+
GET_PRODUCTS_QUERY,
|
|
2204
|
+
GET_PRODUCT_QUERY,
|
|
2205
|
+
GET_PRODUCT_REVIEWS_QUERY,
|
|
2206
|
+
GET_USERS_QUERY,
|
|
2207
|
+
GET_USER_BY_ID_QUERY,
|
|
2208
|
+
GET_USER_QUERY,
|
|
2209
|
+
GOOGLE_AUTH_MUTATION,
|
|
2210
|
+
HTTP_STATUS,
|
|
2211
|
+
JWT_CONFIG,
|
|
2212
|
+
LOGIN_MUTATION,
|
|
2213
|
+
LOGOUT_MUTATION,
|
|
2214
|
+
Logger,
|
|
2215
|
+
MARK_REVIEW_HELPFUL_MUTATION,
|
|
2216
|
+
ORDER_CONFIG,
|
|
2217
|
+
PAGINATION,
|
|
2218
|
+
PORT_CONFIG,
|
|
2219
|
+
PRODUCT_CONFIG,
|
|
2220
|
+
REGEX_PATTERNS,
|
|
2221
|
+
REGISTER_MUTATION,
|
|
2222
|
+
RESET_PASSWORD_MUTATION,
|
|
2223
|
+
SALES_ANALYTICS_QUERY,
|
|
2224
|
+
SEARCH_PRODUCTS_QUERY,
|
|
2225
|
+
SELLER_APP_URL,
|
|
2226
|
+
SEND_VERIFICATION_EMAIL_MUTATION,
|
|
2227
|
+
SERVICE_URLS,
|
|
2228
|
+
SET_DEFAULT_ADDRESS_MUTATION,
|
|
2229
|
+
SHELL_APP_URL,
|
|
2230
|
+
STOREFRONT_APP_URL,
|
|
2231
|
+
SUCCESS_MESSAGES,
|
|
2232
|
+
TIMEOUT_CONFIG,
|
|
2233
|
+
TOGGLE_COUPON_STATUS_MUTATION,
|
|
2234
|
+
UPDATE_ADDRESS_MUTATION,
|
|
2235
|
+
UPDATE_CATEGORY_MUTATION,
|
|
2236
|
+
UPDATE_COUPON_MUTATION,
|
|
2237
|
+
UPDATE_ORDER_STATUS_MUTATION,
|
|
2238
|
+
UPDATE_PAYMENT_STATUS_MUTATION,
|
|
2239
|
+
UPDATE_PRODUCT_MUTATION,
|
|
2240
|
+
UPDATE_PROFILE_MUTATION,
|
|
2241
|
+
UPDATE_USER_ROLE_MUTATION,
|
|
2242
|
+
VALIDATE_COUPON_QUERY,
|
|
2243
|
+
VALIDATE_RESET_TOKEN_QUERY,
|
|
2244
|
+
VERIFY_EMAIL_MUTATION,
|
|
2245
|
+
addDays,
|
|
2246
|
+
addHours,
|
|
2247
|
+
areCookiesEnabled,
|
|
2248
|
+
batchValidate,
|
|
2249
|
+
calculateDiscount,
|
|
2250
|
+
calculatePercentage,
|
|
2251
|
+
calculateTax,
|
|
2252
|
+
capitalize,
|
|
2253
|
+
capitalizeWords,
|
|
2254
|
+
chunk,
|
|
2255
|
+
clearAuth,
|
|
2256
|
+
createApiResponse,
|
|
2257
|
+
debounce,
|
|
2258
|
+
deepMerge,
|
|
2259
|
+
delay,
|
|
2260
|
+
difference,
|
|
2261
|
+
flatten,
|
|
2262
|
+
formatCurrency,
|
|
2263
|
+
formatDate,
|
|
2264
|
+
formatIndianCompact,
|
|
2265
|
+
formatNumber,
|
|
2266
|
+
formatPrice,
|
|
2267
|
+
formatPriceShort,
|
|
2268
|
+
generateRandomCode,
|
|
2269
|
+
getAccessToken,
|
|
2270
|
+
getCookie,
|
|
2271
|
+
getCurrentUser,
|
|
2272
|
+
getDaysDifference,
|
|
2273
|
+
getNestedValue,
|
|
2274
|
+
getRefreshToken,
|
|
2275
|
+
getStoredAuth,
|
|
2276
|
+
groupBy,
|
|
2277
|
+
intersection,
|
|
2278
|
+
isArray,
|
|
2279
|
+
isBoolean,
|
|
2280
|
+
isDateInRange,
|
|
2281
|
+
isEmpty,
|
|
2282
|
+
isFunction,
|
|
2283
|
+
isFutureDate,
|
|
2284
|
+
isNull,
|
|
2285
|
+
isNullOrUndefined,
|
|
2286
|
+
isNumber,
|
|
2287
|
+
isObject,
|
|
2288
|
+
isPastDate,
|
|
2289
|
+
isString,
|
|
2290
|
+
isTokenExpired,
|
|
2291
|
+
isUndefined,
|
|
2292
|
+
isValidCouponCode,
|
|
2293
|
+
isValidEmail,
|
|
2294
|
+
isValidObjectId,
|
|
2295
|
+
isValidPassword,
|
|
2296
|
+
isValidPhone,
|
|
2297
|
+
isValidPostalCode,
|
|
2298
|
+
isValidSku,
|
|
2299
|
+
isValidUrl,
|
|
2300
|
+
omit,
|
|
2301
|
+
pick,
|
|
2302
|
+
removeCookie,
|
|
2303
|
+
removeDuplicates,
|
|
2304
|
+
retry,
|
|
2305
|
+
roundDown,
|
|
2306
|
+
roundUp,
|
|
2307
|
+
setCookie,
|
|
2308
|
+
setNestedValue,
|
|
2309
|
+
setupAutoRefresh,
|
|
2310
|
+
slugify,
|
|
2311
|
+
sortBy,
|
|
2312
|
+
storeAuth,
|
|
2313
|
+
throttle,
|
|
2314
|
+
toTitleCase,
|
|
2315
|
+
truncate,
|
|
2316
|
+
tryParse,
|
|
2317
|
+
unique,
|
|
2318
|
+
updateAccessToken,
|
|
2319
|
+
validateCouponCode,
|
|
2320
|
+
validateDate,
|
|
2321
|
+
validateDateRange,
|
|
2322
|
+
validateDiscountPercentage,
|
|
2323
|
+
validateEmail,
|
|
2324
|
+
validateName,
|
|
2325
|
+
validateObjectId,
|
|
2326
|
+
validatePagination,
|
|
2327
|
+
validatePassword,
|
|
2328
|
+
validatePhone,
|
|
2329
|
+
validatePostalCode,
|
|
2330
|
+
validatePrice,
|
|
2331
|
+
validateQuantity,
|
|
2332
|
+
validateRating,
|
|
2333
|
+
validateSku,
|
|
2334
|
+
validateUrl,
|
|
2335
|
+
validateUserRole,
|
|
2336
|
+
willTokenExpireSoon,
|
|
2337
|
+
withErrorHandling
|
|
2338
|
+
});
|