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/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
+ });