@exyconn/common 2.3.2 → 2.3.3
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 +117 -12
- package/dist/client/http/index.d.mts +217 -49
- package/dist/client/http/index.d.ts +217 -49
- package/dist/client/http/index.js +473 -94
- package/dist/client/http/index.js.map +1 -1
- package/dist/client/http/index.mjs +441 -84
- package/dist/client/http/index.mjs.map +1 -1
- package/dist/client/index.d.mts +3 -3
- package/dist/client/index.d.ts +3 -3
- package/dist/client/index.js +481 -319
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +449 -290
- package/dist/client/index.mjs.map +1 -1
- package/dist/client/utils/index.d.mts +3 -279
- package/dist/client/utils/index.d.ts +3 -279
- package/dist/{index-DuxL84IW.d.mts → index-BZf42T3R.d.mts} +39 -39
- package/dist/{index-D9a9oxQy.d.ts → index-CF0D8PGE.d.ts} +39 -39
- package/dist/{index-D3yCCjBZ.d.mts → index-Ckhm_HaX.d.mts} +21 -2
- package/dist/{index-01hoqibP.d.ts → index-br6POSyA.d.ts} +21 -2
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1122 -329
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1134 -341
- package/dist/index.mjs.map +1 -1
- package/dist/packageCheck-B_qfsD6R.d.ts +280 -0
- package/dist/packageCheck-C2_FT_Rl.d.mts +280 -0
- package/dist/server/index.d.mts +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +631 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +625 -2
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middleware/index.d.mts +283 -2
- package/dist/server/middleware/index.d.ts +283 -2
- package/dist/server/middleware/index.js +761 -0
- package/dist/server/middleware/index.js.map +1 -1
- package/dist/server/middleware/index.mjs +751 -1
- package/dist/server/middleware/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/client/index.mjs
CHANGED
|
@@ -4,108 +4,465 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
4
4
|
import * as Yup from 'yup';
|
|
5
5
|
import { Formik, Form, Field, ErrorMessage } from 'formik';
|
|
6
6
|
|
|
7
|
-
// src/client/http/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
headers: {
|
|
22
|
-
"Content-Type": "application/json"
|
|
7
|
+
// src/client/http/http.ts
|
|
8
|
+
|
|
9
|
+
// src/client/http/logger.ts
|
|
10
|
+
var Logger = class {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.isDevelopment = typeof window !== "undefined" && window.location.hostname === "localhost";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Log informational messages
|
|
16
|
+
*/
|
|
17
|
+
info(message, data, options) {
|
|
18
|
+
if (this.isDevelopment) {
|
|
19
|
+
const prefix = options?.context ? `[${options.context}]` : "";
|
|
20
|
+
console.log(`${prefix} ${message}`, data ?? "");
|
|
23
21
|
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Log warning messages
|
|
25
|
+
*/
|
|
26
|
+
warn(message, data, options) {
|
|
27
|
+
if (this.isDevelopment) {
|
|
28
|
+
const prefix = options?.context ? `[${options.context}]` : "";
|
|
29
|
+
console.warn(`${prefix} ${message}`, data ?? "");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Log error messages
|
|
34
|
+
*/
|
|
35
|
+
error(message, error, options) {
|
|
36
|
+
const prefix = options?.context ? `[${options.context}]` : "";
|
|
37
|
+
if (this.isDevelopment) {
|
|
38
|
+
console.error(`${prefix} ${message}`, error, options?.metadata || "");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Log debug messages (only in development)
|
|
43
|
+
*/
|
|
44
|
+
debug(message, data, options) {
|
|
45
|
+
if (this.isDevelopment) {
|
|
46
|
+
const prefix = options?.context ? `[${options.context}]` : "";
|
|
47
|
+
console.debug(`${prefix} ${message}`, data || "");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Log API errors with structured information
|
|
52
|
+
*/
|
|
53
|
+
apiError(endpoint, error, metadata) {
|
|
54
|
+
this.error(`API Error: ${endpoint}`, error, {
|
|
55
|
+
context: "API",
|
|
56
|
+
metadata: {
|
|
57
|
+
endpoint,
|
|
58
|
+
...metadata
|
|
32
59
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var logger = new Logger();
|
|
64
|
+
|
|
65
|
+
// src/client/http/response-parser.ts
|
|
66
|
+
var STATUS_CODES = {
|
|
67
|
+
SUCCESS: 200,
|
|
68
|
+
CREATED: 201,
|
|
69
|
+
NO_CONTENT: 204,
|
|
70
|
+
BAD_REQUEST: 400,
|
|
71
|
+
UNAUTHORIZED: 401,
|
|
72
|
+
FORBIDDEN: 403,
|
|
73
|
+
NOT_FOUND: 404,
|
|
74
|
+
CONFLICT: 409,
|
|
75
|
+
ERROR: 500
|
|
76
|
+
};
|
|
77
|
+
var STATUS_MESSAGES = {
|
|
78
|
+
SUCCESS: "success",
|
|
79
|
+
CREATED: "created",
|
|
80
|
+
NO_CONTENT: "no_content",
|
|
81
|
+
BAD_REQUEST: "bad_request",
|
|
82
|
+
UNAUTHORIZED: "unauthorized",
|
|
83
|
+
FORBIDDEN: "forbidden",
|
|
84
|
+
NOT_FOUND: "not_found",
|
|
85
|
+
CONFLICT: "conflict",
|
|
86
|
+
ERROR: "error"
|
|
87
|
+
};
|
|
88
|
+
var SUCCESS_CODES = [200, 201, 204];
|
|
89
|
+
var ERROR_CODES = [400, 401, 403, 404, 409, 500];
|
|
90
|
+
var parseResponseData = (response, fallback = null) => {
|
|
91
|
+
try {
|
|
92
|
+
if (!response || typeof response !== "object") {
|
|
93
|
+
return fallback;
|
|
94
|
+
}
|
|
95
|
+
const resp = response;
|
|
96
|
+
if ("data" in resp) {
|
|
97
|
+
return resp["data"] ?? fallback;
|
|
98
|
+
}
|
|
99
|
+
return response;
|
|
100
|
+
} catch (error) {
|
|
101
|
+
logger.error("Error parsing response data", error);
|
|
102
|
+
return fallback;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
var parseResponseMessage = (response, fallback = "") => {
|
|
106
|
+
try {
|
|
107
|
+
if (!response || typeof response !== "object") {
|
|
108
|
+
return fallback;
|
|
109
|
+
}
|
|
110
|
+
const resp = response;
|
|
111
|
+
if ("message" in resp && typeof resp["message"] === "string") {
|
|
112
|
+
return resp["message"];
|
|
113
|
+
}
|
|
114
|
+
return fallback;
|
|
115
|
+
} catch (error) {
|
|
116
|
+
logger.error("Error parsing response message", error);
|
|
117
|
+
return fallback;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
var parseResponseStatus = (response) => {
|
|
121
|
+
try {
|
|
122
|
+
if (!response || typeof response !== "object") {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const resp = response;
|
|
126
|
+
if ("statusCode" in resp && typeof resp["statusCode"] === "number") {
|
|
127
|
+
return resp["statusCode"];
|
|
128
|
+
}
|
|
129
|
+
if ("status" in resp && typeof resp["status"] === "number") {
|
|
130
|
+
return resp["status"];
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
} catch (error) {
|
|
134
|
+
logger.error("Error parsing response status", error);
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
var parseResponseStatusMessage = (response, fallback = "") => {
|
|
139
|
+
try {
|
|
140
|
+
if (!response || typeof response !== "object") {
|
|
141
|
+
return fallback;
|
|
142
|
+
}
|
|
143
|
+
const resp = response;
|
|
144
|
+
if ("status" in resp && typeof resp["status"] === "string") {
|
|
145
|
+
return resp["status"];
|
|
146
|
+
}
|
|
147
|
+
return fallback;
|
|
148
|
+
} catch (error) {
|
|
149
|
+
logger.error("Error parsing response status message", error);
|
|
150
|
+
return fallback;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
var isSuccessResponse = (response) => {
|
|
154
|
+
try {
|
|
155
|
+
const statusCode = parseResponseStatus(response);
|
|
156
|
+
if (statusCode !== null) {
|
|
157
|
+
return SUCCESS_CODES.includes(statusCode);
|
|
158
|
+
}
|
|
159
|
+
const status = parseResponseStatusMessage(response);
|
|
160
|
+
return [STATUS_MESSAGES.SUCCESS, STATUS_MESSAGES.CREATED, STATUS_MESSAGES.NO_CONTENT].includes(
|
|
161
|
+
status
|
|
162
|
+
);
|
|
163
|
+
} catch (error) {
|
|
164
|
+
logger.error("Error checking response success", error);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
var isErrorResponse = (response) => {
|
|
169
|
+
try {
|
|
170
|
+
const statusCode = parseResponseStatus(response);
|
|
171
|
+
if (statusCode !== null) {
|
|
172
|
+
return ERROR_CODES.includes(statusCode);
|
|
173
|
+
}
|
|
174
|
+
return false;
|
|
175
|
+
} catch (error) {
|
|
176
|
+
logger.error("Error checking response error", error);
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
var parsePaginatedResponse = (response) => {
|
|
181
|
+
try {
|
|
182
|
+
if (!response || typeof response !== "object") {
|
|
183
|
+
return { items: [], total: 0, page: 1, limit: 10 };
|
|
184
|
+
}
|
|
185
|
+
const resp = response;
|
|
186
|
+
let items = [];
|
|
187
|
+
if ("data" in resp && Array.isArray(resp["data"])) {
|
|
188
|
+
items = resp["data"];
|
|
189
|
+
}
|
|
190
|
+
let total = items.length;
|
|
191
|
+
let page = 1;
|
|
192
|
+
let limit = 10;
|
|
193
|
+
let totalPages;
|
|
194
|
+
if ("paginationData" in resp && resp["paginationData"] && typeof resp["paginationData"] === "object") {
|
|
195
|
+
const paginationData = resp["paginationData"];
|
|
196
|
+
if ("total" in paginationData && typeof paginationData["total"] === "number") {
|
|
197
|
+
total = paginationData["total"];
|
|
198
|
+
}
|
|
199
|
+
if ("page" in paginationData && typeof paginationData["page"] === "number") {
|
|
200
|
+
page = paginationData["page"];
|
|
201
|
+
}
|
|
202
|
+
if ("limit" in paginationData && typeof paginationData["limit"] === "number") {
|
|
203
|
+
limit = paginationData["limit"];
|
|
204
|
+
}
|
|
205
|
+
if ("totalPages" in paginationData && typeof paginationData["totalPages"] === "number") {
|
|
206
|
+
totalPages = paginationData["totalPages"];
|
|
48
207
|
}
|
|
49
|
-
return Promise.reject(error);
|
|
50
208
|
}
|
|
51
|
-
|
|
52
|
-
|
|
209
|
+
let columns;
|
|
210
|
+
if ("columns" in resp && Array.isArray(resp["columns"])) {
|
|
211
|
+
columns = resp["columns"];
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
items,
|
|
215
|
+
total,
|
|
216
|
+
page,
|
|
217
|
+
limit,
|
|
218
|
+
...totalPages !== void 0 && { totalPages },
|
|
219
|
+
...columns !== void 0 && { columns }
|
|
220
|
+
};
|
|
221
|
+
} catch (error) {
|
|
222
|
+
logger.error("Error parsing paginated response", error);
|
|
223
|
+
return { items: [], total: 0, page: 1, limit: 10 };
|
|
224
|
+
}
|
|
53
225
|
};
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
|
|
226
|
+
var extractNestedData = (response, path, fallback = null) => {
|
|
227
|
+
try {
|
|
228
|
+
const keys = path.split(".");
|
|
229
|
+
let current = response;
|
|
230
|
+
for (const key of keys) {
|
|
231
|
+
if (current && typeof current === "object" && key in current) {
|
|
232
|
+
current = current[key];
|
|
233
|
+
} else {
|
|
234
|
+
return fallback;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return current;
|
|
238
|
+
} catch (error) {
|
|
239
|
+
logger.error("Error extracting nested data", error);
|
|
240
|
+
return fallback;
|
|
57
241
|
}
|
|
58
|
-
}
|
|
59
|
-
var
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
// src/client/http/response-parser.ts
|
|
67
|
-
var parseResponse = (response) => {
|
|
68
|
-
if (response.data?.success && response.data?.data !== void 0) {
|
|
69
|
-
return response.data.data;
|
|
242
|
+
};
|
|
243
|
+
var safeJsonParse = (json, fallback = null) => {
|
|
244
|
+
try {
|
|
245
|
+
return JSON.parse(json);
|
|
246
|
+
} catch (error) {
|
|
247
|
+
logger.error("Error parsing JSON", error);
|
|
248
|
+
return fallback;
|
|
70
249
|
}
|
|
71
|
-
return null;
|
|
72
250
|
};
|
|
73
|
-
var
|
|
74
|
-
|
|
251
|
+
var parseAxiosErrorMessage = (error) => {
|
|
252
|
+
try {
|
|
253
|
+
if (!error || typeof error !== "object") {
|
|
254
|
+
return "An unexpected error occurred";
|
|
255
|
+
}
|
|
256
|
+
const err = error;
|
|
257
|
+
if ("response" in err && err["response"] && typeof err["response"] === "object") {
|
|
258
|
+
const response = err["response"];
|
|
259
|
+
if ("data" in response && response["data"] && typeof response["data"] === "object") {
|
|
260
|
+
const data = response["data"];
|
|
261
|
+
if ("data" in data && data["data"] && typeof data["data"] === "object") {
|
|
262
|
+
const nestedData = data["data"];
|
|
263
|
+
if ("message" in nestedData && typeof nestedData["message"] === "string") {
|
|
264
|
+
return nestedData["message"];
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if ("message" in data && typeof data["message"] === "string") {
|
|
268
|
+
return data["message"];
|
|
269
|
+
}
|
|
270
|
+
if ("error" in data && typeof data["error"] === "string") {
|
|
271
|
+
return data["error"];
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if ("message" in err && typeof err["message"] === "string") {
|
|
276
|
+
return err["message"];
|
|
277
|
+
}
|
|
278
|
+
if (typeof error === "string") {
|
|
279
|
+
return error;
|
|
280
|
+
}
|
|
281
|
+
return "An unexpected error occurred";
|
|
282
|
+
} catch (parseError2) {
|
|
283
|
+
logger.error("Error parsing axios error message", parseError2);
|
|
284
|
+
return "An unexpected error occurred";
|
|
285
|
+
}
|
|
75
286
|
};
|
|
76
287
|
var parseError = (error) => {
|
|
77
|
-
|
|
78
|
-
|
|
288
|
+
try {
|
|
289
|
+
if (!error || typeof error !== "object") {
|
|
290
|
+
return {
|
|
291
|
+
message: "An unexpected error occurred",
|
|
292
|
+
statusCode: null,
|
|
293
|
+
data: null
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
const err = error;
|
|
297
|
+
let statusCode = null;
|
|
298
|
+
let data = null;
|
|
299
|
+
let status;
|
|
300
|
+
if ("response" in err && err["response"] && typeof err["response"] === "object") {
|
|
301
|
+
const response = err["response"];
|
|
302
|
+
if ("status" in response && typeof response["status"] === "number") {
|
|
303
|
+
statusCode = response["status"];
|
|
304
|
+
}
|
|
305
|
+
if ("data" in response && response["data"] !== void 0) {
|
|
306
|
+
data = response["data"];
|
|
307
|
+
if (data && typeof data === "object" && "status" in data) {
|
|
308
|
+
const dataObj = data;
|
|
309
|
+
if (typeof dataObj["status"] === "string") {
|
|
310
|
+
status = dataObj["status"];
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (statusCode === null && "statusCode" in err && typeof err["statusCode"] === "number") {
|
|
316
|
+
statusCode = err["statusCode"];
|
|
317
|
+
}
|
|
318
|
+
if (data === null && "data" in err && err["data"] !== void 0) {
|
|
319
|
+
data = err["data"];
|
|
320
|
+
}
|
|
321
|
+
if (!status && "status" in err && typeof err["status"] === "string") {
|
|
322
|
+
status = err["status"];
|
|
323
|
+
}
|
|
324
|
+
return {
|
|
325
|
+
message: parseAxiosErrorMessage(error),
|
|
326
|
+
statusCode,
|
|
327
|
+
data,
|
|
328
|
+
...status !== void 0 && { status }
|
|
329
|
+
};
|
|
330
|
+
} catch (err) {
|
|
331
|
+
logger.error("Error parsing error object", err);
|
|
332
|
+
return {
|
|
333
|
+
message: "An unexpected error occurred",
|
|
334
|
+
statusCode: null,
|
|
335
|
+
data: null
|
|
336
|
+
};
|
|
79
337
|
}
|
|
80
|
-
|
|
81
|
-
|
|
338
|
+
};
|
|
339
|
+
var simpleParseResponse = (response) => {
|
|
340
|
+
return response?.data?.data?.data;
|
|
341
|
+
};
|
|
342
|
+
var simpleMetaParseResponse = (response) => {
|
|
343
|
+
return response?.data?.data?.meta;
|
|
344
|
+
};
|
|
345
|
+
var simpleParseDualDataResponse = (response) => {
|
|
346
|
+
return response?.data?.data;
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
// src/client/http/http.ts
|
|
350
|
+
var isDevelopment = typeof window !== "undefined" && window.location.hostname === "localhost";
|
|
351
|
+
var API_BASE_URL = isDevelopment ? "http://localhost:4002" : "https://service-api.exyconn.com";
|
|
352
|
+
var API_PREFIX = "/v1/api";
|
|
353
|
+
var axiosInstance = axios.create({
|
|
354
|
+
baseURL: API_BASE_URL,
|
|
355
|
+
timeout: 3e4,
|
|
356
|
+
// 30 seconds
|
|
357
|
+
headers: {
|
|
358
|
+
"Content-Type": "application/json"
|
|
82
359
|
}
|
|
83
|
-
|
|
84
|
-
|
|
360
|
+
});
|
|
361
|
+
axiosInstance.interceptors.request.use(
|
|
362
|
+
(config) => {
|
|
363
|
+
try {
|
|
364
|
+
if (typeof window !== "undefined" && window.localStorage) {
|
|
365
|
+
const selectedOrg = localStorage.getItem("selectedOrganization");
|
|
366
|
+
if (selectedOrg) {
|
|
367
|
+
const org = JSON.parse(selectedOrg);
|
|
368
|
+
if (org && org._id) {
|
|
369
|
+
config.headers["x-organization-id"] = org._id;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
} catch (error) {
|
|
374
|
+
logger.warn("Failed to read organization from localStorage", error);
|
|
375
|
+
}
|
|
376
|
+
return config;
|
|
377
|
+
},
|
|
378
|
+
(error) => {
|
|
379
|
+
return Promise.reject(error);
|
|
85
380
|
}
|
|
86
|
-
|
|
87
|
-
|
|
381
|
+
);
|
|
382
|
+
axiosInstance.interceptors.response.use(
|
|
383
|
+
(response) => response,
|
|
384
|
+
(error) => {
|
|
385
|
+
const parsedError = parseError(error);
|
|
386
|
+
logger.error("API Error", parsedError);
|
|
387
|
+
return Promise.reject(parsedError);
|
|
88
388
|
}
|
|
89
|
-
|
|
389
|
+
);
|
|
390
|
+
var buildHeaders = (customHeaders) => {
|
|
391
|
+
const headers = {
|
|
392
|
+
"Content-Type": "application/json",
|
|
393
|
+
...customHeaders
|
|
394
|
+
};
|
|
395
|
+
return headers;
|
|
90
396
|
};
|
|
91
|
-
var
|
|
92
|
-
|
|
397
|
+
var buildConfig = (params, customHeaders) => {
|
|
398
|
+
const config = {
|
|
399
|
+
headers: buildHeaders(customHeaders)
|
|
400
|
+
};
|
|
401
|
+
if (params) {
|
|
402
|
+
config.params = params;
|
|
403
|
+
}
|
|
404
|
+
return config;
|
|
93
405
|
};
|
|
94
|
-
var
|
|
95
|
-
|
|
406
|
+
var getRequest = async (url, params, customHeaders) => {
|
|
407
|
+
const config = buildConfig(params, customHeaders);
|
|
408
|
+
return axiosInstance.get(url, config);
|
|
96
409
|
};
|
|
97
|
-
var
|
|
98
|
-
|
|
410
|
+
var postRequest = async (url, data, customHeaders) => {
|
|
411
|
+
const config = buildConfig(void 0, customHeaders);
|
|
412
|
+
return axiosInstance.post(url, data, config);
|
|
99
413
|
};
|
|
100
|
-
var
|
|
101
|
-
|
|
414
|
+
var putRequest = async (url, data, customHeaders) => {
|
|
415
|
+
const config = buildConfig(void 0, customHeaders);
|
|
416
|
+
return axiosInstance.put(url, data, config);
|
|
102
417
|
};
|
|
103
|
-
var
|
|
104
|
-
|
|
418
|
+
var patchRequest = async (url, data, customHeaders) => {
|
|
419
|
+
const config = buildConfig(void 0, customHeaders);
|
|
420
|
+
return axiosInstance.patch(url, data, config);
|
|
105
421
|
};
|
|
106
|
-
var
|
|
107
|
-
const
|
|
108
|
-
return
|
|
422
|
+
var deleteRequest = async (url, params, customHeaders) => {
|
|
423
|
+
const config = buildConfig(params, customHeaders);
|
|
424
|
+
return axiosInstance.delete(url, config);
|
|
425
|
+
};
|
|
426
|
+
var uploadFile = async (url, file, additionalData) => {
|
|
427
|
+
const formData = new FormData();
|
|
428
|
+
formData.append("file", file);
|
|
429
|
+
if (additionalData) {
|
|
430
|
+
Object.entries(additionalData).forEach(([key, value]) => {
|
|
431
|
+
formData.append(key, String(value));
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
const config = {
|
|
435
|
+
headers: {
|
|
436
|
+
"Content-Type": "multipart/form-data"
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
return axiosInstance.post(url, formData, config);
|
|
440
|
+
};
|
|
441
|
+
var extractData = (response) => {
|
|
442
|
+
return parseResponseData(response.data);
|
|
443
|
+
};
|
|
444
|
+
var extractMessage = (response) => {
|
|
445
|
+
return parseResponseMessage(response, "");
|
|
446
|
+
};
|
|
447
|
+
var isSuccess = (response) => {
|
|
448
|
+
return response.status >= 200 && response.status < 300;
|
|
449
|
+
};
|
|
450
|
+
var extractPaginatedData = (response) => {
|
|
451
|
+
return parsePaginatedResponse(response.data);
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
// src/client/http/slug.ts
|
|
455
|
+
var generateSlug = (text) => {
|
|
456
|
+
if (!text) return "";
|
|
457
|
+
return text.trim().replace(/[^\w\s]/g, "").replace(/\s+(.)/g, (_, char) => char.toUpperCase()).replace(/\s+/g, "").replace(/^(.)/, (_, char) => char.toLowerCase());
|
|
458
|
+
};
|
|
459
|
+
var generateUrlSlug = (text) => {
|
|
460
|
+
if (!text) return "";
|
|
461
|
+
return text.trim().toLowerCase().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
462
|
+
};
|
|
463
|
+
var generateSnakeSlug = (text) => {
|
|
464
|
+
if (!text) return "";
|
|
465
|
+
return text.trim().toLowerCase().replace(/[^\w\s]/g, "").replace(/\s+/g, "_").replace(/_+/g, "_").replace(/^_|_$/g, "");
|
|
109
466
|
};
|
|
110
467
|
|
|
111
468
|
// src/client/logger/client-logger.ts
|
|
@@ -261,40 +618,6 @@ var formatRelativeTime = (date) => {
|
|
|
261
618
|
}
|
|
262
619
|
return "just now";
|
|
263
620
|
};
|
|
264
|
-
var formatDateForInput = (date) => {
|
|
265
|
-
const dateObj = new Date(date);
|
|
266
|
-
return dateObj.toISOString().split("T")[0];
|
|
267
|
-
};
|
|
268
|
-
var formatDateTimeForInput = (date) => {
|
|
269
|
-
const dateObj = new Date(date);
|
|
270
|
-
return dateObj.toISOString().slice(0, 16);
|
|
271
|
-
};
|
|
272
|
-
var isToday = (date) => {
|
|
273
|
-
const dateObj = new Date(date);
|
|
274
|
-
const today = /* @__PURE__ */ new Date();
|
|
275
|
-
return dateObj.getDate() === today.getDate() && dateObj.getMonth() === today.getMonth() && dateObj.getFullYear() === today.getFullYear();
|
|
276
|
-
};
|
|
277
|
-
var isPast = (date) => {
|
|
278
|
-
return new Date(date).getTime() < Date.now();
|
|
279
|
-
};
|
|
280
|
-
var isFuture = (date) => {
|
|
281
|
-
return new Date(date).getTime() > Date.now();
|
|
282
|
-
};
|
|
283
|
-
var addDays = (date, days) => {
|
|
284
|
-
const dateObj = new Date(date);
|
|
285
|
-
dateObj.setDate(dateObj.getDate() + days);
|
|
286
|
-
return dateObj;
|
|
287
|
-
};
|
|
288
|
-
var startOfDay = (date) => {
|
|
289
|
-
const dateObj = new Date(date);
|
|
290
|
-
dateObj.setHours(0, 0, 0, 0);
|
|
291
|
-
return dateObj;
|
|
292
|
-
};
|
|
293
|
-
var endOfDay = (date) => {
|
|
294
|
-
const dateObj = new Date(date);
|
|
295
|
-
dateObj.setHours(23, 59, 59, 999);
|
|
296
|
-
return dateObj;
|
|
297
|
-
};
|
|
298
621
|
|
|
299
622
|
// src/client/utils/clipboard.ts
|
|
300
623
|
var copyToClipboard = async (text) => {
|
|
@@ -319,20 +642,6 @@ var copyToClipboard = async (text) => {
|
|
|
319
642
|
return false;
|
|
320
643
|
}
|
|
321
644
|
};
|
|
322
|
-
var readFromClipboard = async () => {
|
|
323
|
-
try {
|
|
324
|
-
if (navigator.clipboard && window.isSecureContext) {
|
|
325
|
-
return await navigator.clipboard.readText();
|
|
326
|
-
}
|
|
327
|
-
return null;
|
|
328
|
-
} catch (error) {
|
|
329
|
-
console.error("Failed to read from clipboard:", error);
|
|
330
|
-
return null;
|
|
331
|
-
}
|
|
332
|
-
};
|
|
333
|
-
var isClipboardAvailable = () => {
|
|
334
|
-
return !!(navigator.clipboard && window.isSecureContext);
|
|
335
|
-
};
|
|
336
645
|
|
|
337
646
|
// src/client/utils/slug.ts
|
|
338
647
|
var slugify = (text) => {
|
|
@@ -369,165 +678,15 @@ var kebabToCamel = (text) => {
|
|
|
369
678
|
return text.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
370
679
|
};
|
|
371
680
|
|
|
372
|
-
// src/client/utils/events.ts
|
|
373
|
-
var EventEmitter = class {
|
|
374
|
-
constructor() {
|
|
375
|
-
this.handlers = /* @__PURE__ */ new Map();
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Subscribe to an event
|
|
379
|
-
* @returns Unsubscribe function
|
|
380
|
-
*/
|
|
381
|
-
on(event, handler) {
|
|
382
|
-
if (!this.handlers.has(event)) {
|
|
383
|
-
this.handlers.set(event, /* @__PURE__ */ new Set());
|
|
384
|
-
}
|
|
385
|
-
this.handlers.get(event).add(handler);
|
|
386
|
-
return () => this.off(event, handler);
|
|
387
|
-
}
|
|
388
|
-
/**
|
|
389
|
-
* Subscribe to an event once
|
|
390
|
-
*/
|
|
391
|
-
once(event, handler) {
|
|
392
|
-
const wrappedHandler = (data) => {
|
|
393
|
-
this.off(event, wrappedHandler);
|
|
394
|
-
handler(data);
|
|
395
|
-
};
|
|
396
|
-
return this.on(event, wrappedHandler);
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Unsubscribe from an event
|
|
400
|
-
*/
|
|
401
|
-
off(event, handler) {
|
|
402
|
-
const eventHandlers = this.handlers.get(event);
|
|
403
|
-
if (eventHandlers) {
|
|
404
|
-
eventHandlers.delete(handler);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* Emit an event
|
|
409
|
-
*/
|
|
410
|
-
emit(event, data) {
|
|
411
|
-
const eventHandlers = this.handlers.get(event);
|
|
412
|
-
if (eventHandlers) {
|
|
413
|
-
eventHandlers.forEach((handler) => {
|
|
414
|
-
try {
|
|
415
|
-
handler(data);
|
|
416
|
-
} catch (error) {
|
|
417
|
-
console.error(`Error in event handler for "${String(event)}":`, error);
|
|
418
|
-
}
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Remove all handlers for an event (or all events)
|
|
424
|
-
*/
|
|
425
|
-
removeAllListeners(event) {
|
|
426
|
-
if (event) {
|
|
427
|
-
this.handlers.delete(event);
|
|
428
|
-
} else {
|
|
429
|
-
this.handlers.clear();
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Get count of listeners for an event
|
|
434
|
-
*/
|
|
435
|
-
listenerCount(event) {
|
|
436
|
-
return this.handlers.get(event)?.size ?? 0;
|
|
437
|
-
}
|
|
438
|
-
};
|
|
439
|
-
var createEventEmitter = () => {
|
|
440
|
-
return new EventEmitter();
|
|
441
|
-
};
|
|
442
|
-
var appEvents = new EventEmitter();
|
|
443
|
-
|
|
444
|
-
// src/client/utils/api-urls.ts
|
|
445
|
-
var ApiUrlBuilder = class {
|
|
446
|
-
constructor(config) {
|
|
447
|
-
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
448
|
-
this.version = config.version || "";
|
|
449
|
-
}
|
|
450
|
-
/**
|
|
451
|
-
* Build full URL from path
|
|
452
|
-
*/
|
|
453
|
-
build(path) {
|
|
454
|
-
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
|
455
|
-
const versionPath = this.version ? `/${this.version}` : "";
|
|
456
|
-
return `${this.baseUrl}${versionPath}${normalizedPath}`;
|
|
457
|
-
}
|
|
458
|
-
/**
|
|
459
|
-
* Build URL with query parameters
|
|
460
|
-
*/
|
|
461
|
-
buildWithParams(path, params) {
|
|
462
|
-
const url = this.build(path);
|
|
463
|
-
const filteredParams = Object.entries(params).filter(([, value]) => value !== void 0).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`).join("&");
|
|
464
|
-
return filteredParams ? `${url}?${filteredParams}` : url;
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* Build URL with path parameters
|
|
468
|
-
*/
|
|
469
|
-
buildWithPathParams(template, params) {
|
|
470
|
-
let path = template;
|
|
471
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
472
|
-
path = path.replace(`:${key}`, String(value));
|
|
473
|
-
path = path.replace(`{${key}}`, String(value));
|
|
474
|
-
});
|
|
475
|
-
return this.build(path);
|
|
476
|
-
}
|
|
477
|
-
/**
|
|
478
|
-
* Get base URL
|
|
479
|
-
*/
|
|
480
|
-
getBaseUrl() {
|
|
481
|
-
return this.baseUrl;
|
|
482
|
-
}
|
|
483
|
-
/**
|
|
484
|
-
* Set new base URL
|
|
485
|
-
*/
|
|
486
|
-
setBaseUrl(baseUrl) {
|
|
487
|
-
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
488
|
-
}
|
|
489
|
-
};
|
|
490
|
-
var createApiUrlBuilder = (config) => {
|
|
491
|
-
return new ApiUrlBuilder(config);
|
|
492
|
-
};
|
|
493
|
-
var createApiEndpoints = (builder) => ({
|
|
494
|
-
// Auth endpoints
|
|
495
|
-
auth: {
|
|
496
|
-
login: () => builder.build("/auth/login"),
|
|
497
|
-
register: () => builder.build("/auth/register"),
|
|
498
|
-
logout: () => builder.build("/auth/logout"),
|
|
499
|
-
refresh: () => builder.build("/auth/refresh"),
|
|
500
|
-
me: () => builder.build("/auth/me"),
|
|
501
|
-
forgotPassword: () => builder.build("/auth/forgot-password"),
|
|
502
|
-
resetPassword: () => builder.build("/auth/reset-password")
|
|
503
|
-
},
|
|
504
|
-
// User endpoints
|
|
505
|
-
users: {
|
|
506
|
-
list: () => builder.build("/users"),
|
|
507
|
-
get: (id) => builder.buildWithPathParams("/users/:id", { id }),
|
|
508
|
-
create: () => builder.build("/users"),
|
|
509
|
-
update: (id) => builder.buildWithPathParams("/users/:id", { id }),
|
|
510
|
-
delete: (id) => builder.buildWithPathParams("/users/:id", { id })
|
|
511
|
-
},
|
|
512
|
-
// Generic CRUD factory
|
|
513
|
-
crud: (resource) => ({
|
|
514
|
-
list: () => builder.build(`/${resource}`),
|
|
515
|
-
get: (id) => builder.buildWithPathParams(`/${resource}/:id`, { id }),
|
|
516
|
-
create: () => builder.build(`/${resource}`),
|
|
517
|
-
update: (id) => builder.buildWithPathParams(`/${resource}/:id`, { id }),
|
|
518
|
-
delete: (id) => builder.buildWithPathParams(`/${resource}/:id`, { id })
|
|
519
|
-
})
|
|
520
|
-
});
|
|
521
|
-
|
|
522
681
|
// src/client/utils/response-parser.ts
|
|
523
|
-
var
|
|
682
|
+
var isSuccessResponse2 = (response) => {
|
|
524
683
|
return response.success === true;
|
|
525
684
|
};
|
|
526
|
-
var
|
|
685
|
+
var isErrorResponse2 = (response) => {
|
|
527
686
|
return response.success === false;
|
|
528
687
|
};
|
|
529
688
|
var getResponseData = (response, defaultValue) => {
|
|
530
|
-
if (
|
|
689
|
+
if (isSuccessResponse2(response) && response.data !== void 0) {
|
|
531
690
|
return response.data;
|
|
532
691
|
}
|
|
533
692
|
return defaultValue;
|
|
@@ -2768,18 +2927,18 @@ function useLogger(componentName, props, options = {}) {
|
|
|
2768
2927
|
const {
|
|
2769
2928
|
logProps = true,
|
|
2770
2929
|
logLifecycle = true,
|
|
2771
|
-
logger = console.log
|
|
2930
|
+
logger: logger2 = console.log
|
|
2772
2931
|
} = options;
|
|
2773
2932
|
const previousProps = useRef(props);
|
|
2774
2933
|
const renderCount = useRef(0);
|
|
2775
2934
|
renderCount.current++;
|
|
2776
2935
|
useEffect(() => {
|
|
2777
2936
|
if (logLifecycle) {
|
|
2778
|
-
|
|
2937
|
+
logger2(`[${componentName}] Mounted`);
|
|
2779
2938
|
}
|
|
2780
2939
|
return () => {
|
|
2781
2940
|
if (logLifecycle) {
|
|
2782
|
-
|
|
2941
|
+
logger2(`[${componentName}] Unmounted (rendered ${renderCount.current} times)`);
|
|
2783
2942
|
}
|
|
2784
2943
|
};
|
|
2785
2944
|
}, []);
|
|
@@ -2811,12 +2970,12 @@ function useLogger(componentName, props, options = {}) {
|
|
|
2811
2970
|
});
|
|
2812
2971
|
}
|
|
2813
2972
|
if (hasChanges) {
|
|
2814
|
-
|
|
2973
|
+
logger2(`[${componentName}] Props changed:`, changedProps);
|
|
2815
2974
|
}
|
|
2816
2975
|
previousProps.current = props;
|
|
2817
|
-
}, [componentName, props, logProps,
|
|
2976
|
+
}, [componentName, props, logProps, logger2]);
|
|
2818
2977
|
if (process.env.NODE_ENV === "development") {
|
|
2819
|
-
|
|
2978
|
+
logger2(`[${componentName}] Render #${renderCount.current}`);
|
|
2820
2979
|
}
|
|
2821
2980
|
}
|
|
2822
2981
|
var useLogger_default = useLogger;
|
|
@@ -5603,6 +5762,6 @@ function RegisterForm({
|
|
|
5603
5762
|
) });
|
|
5604
5763
|
}
|
|
5605
5764
|
|
|
5606
|
-
export {
|
|
5765
|
+
export { API_BASE_URL, API_PREFIX, ClientLogger, ContactForm, ERROR_CODES, LoginForm, NewsletterForm, RegisterForm, STATUS_CODES, STATUS_MESSAGES, SUCCESS_CODES, ThemeContext, ThemeProvider, ThemeToggle, VALIDATION_MESSAGES, adjustColor, axiosInstance as axios, camelToKebab, capitalize, capitalizeWords, clientLogger, contactFormSchema, copyToClipboard, createClientLogger, createEmptyPaginationMeta, createErrorResponse, createRegisterFormSchema, createSuccessResponse, createTheme, createThemeFromBrand, cssVar, deepMerge, defaultDarkTheme, defaultLightTheme, deleteRequest, dummyBannerData, dummyFaqItems, dummyFeatures, dummyFooterData, dummyHeaderData, dummyImage, dummyPricingPlans, dummyTestimonials, extractData, extractMessage, extractNestedData, extractPaginatedData, flattenToCssVars, formatDate, formatDateTime, formatRelativeTime, generateCssVars, generateSlug, generateSnakeSlug, generateUrlSlug, getContrastColor, getErrorMessage, getNextPage, getPrevPage, getRequest, getResponseData, getSystemColorScheme, hasData, hasMorePages, hexToRgba, injectCssVars, isErrorResponse, isSuccess, isSuccessResponse, isErrorResponse2 as isUtilErrorResponse, isSuccessResponse2 as isUtilSuccessResponse, kebabToCamel, loadThemeFromUrl, loadThemeMode, logger, loginFormSchema, loremIpsum, newsletterFormSchema, packageCheck, parseAxiosErrorMessage, parseError, parsePaginatedResponse, parseResponseData, parseResponseMessage, parseResponseStatus, parseResponseStatusMessage, patchRequest, postRequest, putRequest, registerFormSchema, removeCssVars, resolveThemeMode, safeJsonParse, saveThemeMode, simpleMetaParseResponse, simpleParseDualDataResponse, simpleParseResponse, slugify, slugifyUnique, truncate, truncateWords, unslugify, uploadFile, useBattery_default as useBattery, useClickAway_default as useClickAway, useContinuousRetry_default as useContinuousRetry, useCopyToClipboard_default as useCopyToClipboard, useCountdown_default as useCountdown, useCounter_default as useCounter, useDebounce_default as useDebounce, useDefault_default as useDefault, useDocumentTitle_default as useDocumentTitle, useEventListener_default as useEventListener, useFavicon_default as useFavicon, useFetch_default as useFetch, useGeolocation_default as useGeolocation, useHistoryState_default as useHistoryState, useHover_default as useHover, useIdle_default as useIdle, useIntersectionObserver_default as useIntersectionObserver, useInterval_default as useInterval, useIntervalWhen_default as useIntervalWhen, useIsClient_default as useIsClient, useIsDesktop, useIsFirstRender_default as useIsFirstRender, useIsMobile, useIsMobileOrTablet, useIsTablet, useKeyPress_default as useKeyPress, useList_default as useList, useLocalStorage_default as useLocalStorage, useLockBodyScroll_default as useLockBodyScroll, useLogger_default as useLogger, useLongPress_default as useLongPress, useMap_default as useMap, useMeasure_default as useMeasure, useMediaQuery_default as useMediaQuery, useMouse_default as useMouse, useNetworkState_default as useNetworkState, useObjectState_default as useObjectState, useOnClickOutside_default as useOnClickOutside, useOrientation_default as useOrientation, usePageLeave_default as usePageLeave, usePageTitle_default as usePageTitle, usePreferredLanguage_default as usePreferredLanguage, usePrevious_default as usePrevious, useQueue_default as useQueue, useRandomInterval_default as useRandomInterval, useRenderCount_default as useRenderCount, useRenderInfo_default as useRenderInfo, useScript_default as useScript, useSessionStorage_default as useSessionStorage, useSet_default as useSet, useSnackbar_default as useSnackbar, useTheme, useThemeDetector_default as useThemeDetector, useThemeValue, useThrottle_default as useThrottle, useTimeout_default as useTimeout, useToggle_default as useToggle, useVisibilityChange_default as useVisibilityChange, useWindowScroll_default as useWindowScroll, useWindowSize_default as useWindowSize };
|
|
5607
5766
|
//# sourceMappingURL=index.mjs.map
|
|
5608
5767
|
//# sourceMappingURL=index.mjs.map
|