@blackcode_sa/metaestetics-api 1.12.62 → 1.12.64
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/admin/index.d.mts +4 -2
- package/dist/admin/index.d.ts +4 -2
- package/dist/admin/index.js +4 -45
- package/dist/admin/index.mjs +4 -45
- package/dist/backoffice/index.d.mts +86 -1
- package/dist/backoffice/index.d.ts +86 -1
- package/dist/backoffice/index.js +308 -0
- package/dist/backoffice/index.mjs +306 -0
- package/dist/index.d.mts +99 -3
- package/dist/index.d.ts +99 -3
- package/dist/index.js +545 -281
- package/dist/index.mjs +867 -603
- package/package.json +119 -119
- package/src/__mocks__/firstore.ts +10 -10
- package/src/admin/aggregation/README.md +79 -79
- package/src/admin/aggregation/appointment/README.md +128 -128
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +1844 -1844
- package/src/admin/aggregation/appointment/index.ts +1 -1
- package/src/admin/aggregation/clinic/README.md +52 -52
- package/src/admin/aggregation/clinic/clinic.aggregation.service.ts +703 -703
- package/src/admin/aggregation/clinic/index.ts +1 -1
- package/src/admin/aggregation/forms/README.md +13 -13
- package/src/admin/aggregation/forms/filled-forms.aggregation.service.ts +322 -322
- package/src/admin/aggregation/forms/index.ts +1 -1
- package/src/admin/aggregation/index.ts +8 -8
- package/src/admin/aggregation/patient/README.md +27 -27
- package/src/admin/aggregation/patient/index.ts +1 -1
- package/src/admin/aggregation/patient/patient.aggregation.service.ts +141 -141
- package/src/admin/aggregation/practitioner/README.md +42 -42
- package/src/admin/aggregation/practitioner/index.ts +1 -1
- package/src/admin/aggregation/practitioner/practitioner.aggregation.service.ts +433 -433
- package/src/admin/aggregation/practitioner-invite/index.ts +1 -1
- package/src/admin/aggregation/practitioner-invite/practitioner-invite.aggregation.service.ts +961 -961
- package/src/admin/aggregation/procedure/README.md +43 -43
- package/src/admin/aggregation/procedure/index.ts +1 -1
- package/src/admin/aggregation/procedure/procedure.aggregation.service.ts +702 -702
- package/src/admin/aggregation/reviews/index.ts +1 -1
- package/src/admin/aggregation/reviews/reviews.aggregation.service.ts +641 -689
- package/src/admin/booking/README.md +125 -125
- package/src/admin/booking/booking.admin.ts +1037 -1037
- package/src/admin/booking/booking.calculator.ts +712 -712
- package/src/admin/booking/booking.types.ts +59 -59
- package/src/admin/booking/index.ts +3 -3
- package/src/admin/booking/timezones-problem.md +185 -185
- package/src/admin/calendar/README.md +7 -7
- package/src/admin/calendar/calendar.admin.service.ts +345 -345
- package/src/admin/calendar/index.ts +1 -1
- package/src/admin/documentation-templates/document-manager.admin.ts +260 -260
- package/src/admin/documentation-templates/index.ts +1 -1
- package/src/admin/free-consultation/free-consultation-utils.admin.ts +148 -148
- package/src/admin/free-consultation/index.ts +1 -1
- package/src/admin/index.ts +75 -75
- package/src/admin/logger/index.ts +78 -78
- package/src/admin/mailing/README.md +95 -95
- package/src/admin/mailing/appointment/appointment.mailing.service.ts +732 -732
- package/src/admin/mailing/appointment/index.ts +1 -1
- package/src/admin/mailing/appointment/templates/patient/appointment-confirmed.html +40 -40
- package/src/admin/mailing/base.mailing.service.ts +208 -208
- package/src/admin/mailing/index.ts +3 -3
- package/src/admin/mailing/practitionerInvite/existing-practitioner-invite.mailing.ts +611 -611
- package/src/admin/mailing/practitionerInvite/index.ts +2 -2
- package/src/admin/mailing/practitionerInvite/practitionerInvite.mailing.ts +395 -395
- package/src/admin/mailing/practitionerInvite/templates/existing-practitioner-invitation.template.ts +155 -155
- package/src/admin/mailing/practitionerInvite/templates/invitation.template.ts +101 -101
- package/src/admin/mailing/practitionerInvite/templates/invite-accepted-notification.template.ts +228 -228
- package/src/admin/mailing/practitionerInvite/templates/invite-rejected-notification.template.ts +242 -242
- package/src/admin/notifications/index.ts +1 -1
- package/src/admin/notifications/notifications.admin.ts +710 -710
- package/src/admin/requirements/README.md +128 -128
- package/src/admin/requirements/index.ts +1 -1
- package/src/admin/requirements/patient-requirements.admin.service.ts +475 -475
- package/src/admin/users/index.ts +1 -1
- package/src/admin/users/user-profile.admin.ts +405 -405
- package/src/backoffice/constants/certification.constants.ts +13 -13
- package/src/backoffice/constants/index.ts +1 -1
- package/src/backoffice/errors/backoffice.errors.ts +181 -181
- package/src/backoffice/errors/index.ts +1 -1
- package/src/backoffice/expo-safe/README.md +26 -26
- package/src/backoffice/expo-safe/index.ts +41 -41
- package/src/backoffice/index.ts +5 -5
- package/src/backoffice/services/FIXES_README.md +102 -102
- package/src/backoffice/services/README.md +40 -40
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +318 -318
- package/src/backoffice/services/constants.service.ts +385 -385
- package/src/backoffice/services/documentation-template.service.ts +202 -202
- package/src/backoffice/services/index.ts +11 -8
- package/src/backoffice/services/migrate-products.ts +116 -116
- package/src/backoffice/services/product.service.ts +553 -553
- package/src/backoffice/services/requirement.service.ts +235 -235
- package/src/backoffice/services/subcategory.service.ts +395 -395
- package/src/backoffice/services/technology.service.ts +1083 -1070
- package/src/backoffice/types/README.md +12 -12
- package/src/backoffice/types/admin-constants.types.ts +69 -69
- package/src/backoffice/types/brand.types.ts +29 -29
- package/src/backoffice/types/category.types.ts +62 -62
- package/src/backoffice/types/documentation-templates.types.ts +28 -28
- package/src/backoffice/types/index.ts +10 -10
- package/src/backoffice/types/procedure-product.types.ts +38 -38
- package/src/backoffice/types/product.types.ts +240 -240
- package/src/backoffice/types/requirement.types.ts +63 -63
- package/src/backoffice/types/static/README.md +18 -18
- package/src/backoffice/types/static/blocking-condition.types.ts +21 -21
- package/src/backoffice/types/static/certification.types.ts +37 -37
- package/src/backoffice/types/static/contraindication.types.ts +19 -19
- package/src/backoffice/types/static/index.ts +6 -6
- package/src/backoffice/types/static/pricing.types.ts +16 -16
- package/src/backoffice/types/static/procedure-family.types.ts +14 -14
- package/src/backoffice/types/static/treatment-benefit.types.ts +22 -22
- package/src/backoffice/types/subcategory.types.ts +34 -34
- package/src/backoffice/types/technology.types.ts +163 -161
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +164 -163
- package/src/config/__mocks__/firebase.ts +99 -99
- package/src/config/firebase.ts +78 -78
- package/src/config/index.ts +9 -9
- package/src/errors/auth.error.ts +6 -6
- package/src/errors/auth.errors.ts +200 -200
- package/src/errors/clinic.errors.ts +32 -32
- package/src/errors/firebase.errors.ts +47 -47
- package/src/errors/user.errors.ts +99 -99
- package/src/index.backup.ts +407 -407
- package/src/index.ts +6 -6
- package/src/locales/en.ts +31 -31
- package/src/recommender/admin/index.ts +1 -1
- package/src/recommender/admin/services/recommender.service.admin.ts +5 -5
- package/src/recommender/front/index.ts +1 -1
- package/src/recommender/front/services/onboarding.service.ts +5 -5
- package/src/recommender/front/services/recommender.service.ts +3 -3
- package/src/recommender/index.ts +1 -1
- package/src/services/PATIENTAUTH.MD +197 -197
- package/src/services/README.md +106 -106
- package/src/services/__tests__/auth/auth.mock.test.ts +17 -17
- package/src/services/__tests__/auth/auth.setup.ts +293 -293
- package/src/services/__tests__/auth.service.test.ts +346 -346
- package/src/services/__tests__/base.service.test.ts +77 -77
- package/src/services/__tests__/user.service.test.ts +528 -528
- package/src/services/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2505 -2082
- package/src/services/appointment/index.ts +1 -1
- package/src/services/appointment/utils/appointment.utils.ts +552 -552
- package/src/services/appointment/utils/extended-procedure.utils.ts +314 -314
- package/src/services/appointment/utils/form-initialization.utils.ts +225 -225
- package/src/services/appointment/utils/recommended-procedure.utils.ts +195 -195
- package/src/services/appointment/utils/zone-management.utils.ts +353 -353
- package/src/services/appointment/utils/zone-photo.utils.ts +152 -152
- package/src/services/auth/auth.service.ts +989 -989
- package/src/services/auth/auth.v2.service.ts +961 -961
- package/src/services/auth/index.ts +7 -7
- package/src/services/auth/utils/error.utils.ts +90 -90
- package/src/services/auth/utils/firebase.utils.ts +49 -49
- package/src/services/auth/utils/index.ts +21 -21
- package/src/services/auth/utils/practitioner.utils.ts +125 -125
- package/src/services/base.service.ts +41 -41
- package/src/services/calendar/calendar.service.ts +1077 -1077
- package/src/services/calendar/calendar.v2.service.ts +1683 -1683
- package/src/services/calendar/calendar.v3.service.ts +313 -313
- package/src/services/calendar/externalCalendar.service.ts +178 -178
- package/src/services/calendar/index.ts +5 -5
- package/src/services/calendar/synced-calendars.service.ts +743 -743
- package/src/services/calendar/utils/appointment.utils.ts +265 -265
- package/src/services/calendar/utils/calendar-event.utils.ts +646 -646
- package/src/services/calendar/utils/clinic.utils.ts +237 -237
- package/src/services/calendar/utils/docs.utils.ts +157 -157
- package/src/services/calendar/utils/google-calendar.utils.ts +697 -697
- package/src/services/calendar/utils/index.ts +8 -8
- package/src/services/calendar/utils/patient.utils.ts +198 -198
- package/src/services/calendar/utils/practitioner.utils.ts +221 -221
- package/src/services/calendar/utils/synced-calendar.utils.ts +472 -472
- package/src/services/clinic/README.md +204 -204
- package/src/services/clinic/__tests__/clinic-admin.service.test.ts +287 -287
- package/src/services/clinic/__tests__/clinic-group.service.test.ts +352 -352
- package/src/services/clinic/__tests__/clinic.service.test.ts +354 -354
- package/src/services/clinic/billing-transactions.service.ts +217 -217
- package/src/services/clinic/clinic-admin.service.ts +202 -202
- package/src/services/clinic/clinic-group.service.ts +310 -310
- package/src/services/clinic/clinic.service.ts +708 -708
- package/src/services/clinic/index.ts +5 -5
- package/src/services/clinic/practitioner-invite.service.ts +519 -519
- package/src/services/clinic/utils/admin.utils.ts +551 -551
- package/src/services/clinic/utils/clinic-group.utils.ts +646 -646
- package/src/services/clinic/utils/clinic.utils.ts +949 -949
- package/src/services/clinic/utils/filter.utils.d.ts +23 -23
- package/src/services/clinic/utils/filter.utils.ts +446 -446
- package/src/services/clinic/utils/index.ts +11 -11
- package/src/services/clinic/utils/photos.utils.ts +188 -188
- package/src/services/clinic/utils/search.utils.ts +84 -84
- package/src/services/clinic/utils/tag.utils.ts +124 -124
- package/src/services/documentation-templates/documentation-template.service.ts +537 -537
- package/src/services/documentation-templates/filled-document.service.ts +587 -587
- package/src/services/documentation-templates/index.ts +2 -2
- package/src/services/index.ts +13 -13
- package/src/services/media/index.ts +1 -1
- package/src/services/media/media.service.ts +418 -418
- package/src/services/notifications/__tests__/notification.service.test.ts +242 -242
- package/src/services/notifications/index.ts +1 -1
- package/src/services/notifications/notification.service.ts +215 -215
- package/src/services/patient/README.md +48 -48
- package/src/services/patient/To-Do.md +43 -43
- package/src/services/patient/__tests__/patient.service.test.ts +294 -294
- package/src/services/patient/index.ts +2 -2
- package/src/services/patient/patient.service.ts +883 -883
- package/src/services/patient/patientRequirements.service.ts +285 -285
- package/src/services/patient/utils/aesthetic-analysis.utils.ts +176 -176
- package/src/services/patient/utils/clinic.utils.ts +80 -80
- package/src/services/patient/utils/docs.utils.ts +142 -142
- package/src/services/patient/utils/index.ts +9 -9
- package/src/services/patient/utils/location.utils.ts +126 -126
- package/src/services/patient/utils/medical-stuff.utils.ts +143 -143
- package/src/services/patient/utils/medical.utils.ts +458 -458
- package/src/services/patient/utils/practitioner.utils.ts +260 -260
- package/src/services/patient/utils/profile.utils.ts +510 -510
- package/src/services/patient/utils/sensitive.utils.ts +260 -260
- package/src/services/patient/utils/token.utils.ts +211 -211
- package/src/services/practitioner/README.md +145 -145
- package/src/services/practitioner/index.ts +1 -1
- package/src/services/practitioner/practitioner.service.ts +1742 -1742
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +1682 -1682
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +636 -683
- package/src/services/user/index.ts +1 -1
- package/src/services/user/user.service.ts +489 -489
- package/src/services/user/user.v2.service.ts +466 -466
- package/src/types/appointment/index.ts +481 -453
- package/src/types/calendar/index.ts +258 -258
- package/src/types/calendar/synced-calendar.types.ts +66 -66
- package/src/types/clinic/index.ts +489 -489
- package/src/types/clinic/practitioner-invite.types.ts +91 -91
- package/src/types/clinic/preferences.types.ts +159 -159
- package/src/types/clinic/to-do +3 -3
- package/src/types/documentation-templates/index.ts +308 -308
- package/src/types/index.ts +44 -44
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +265 -265
- package/src/types/patient/aesthetic-analysis.types.ts +66 -66
- package/src/types/patient/allergies.ts +58 -58
- package/src/types/patient/index.ts +275 -273
- package/src/types/patient/medical-info.types.ts +152 -152
- package/src/types/patient/patient-requirements.ts +92 -92
- package/src/types/patient/token.types.ts +61 -61
- package/src/types/practitioner/index.ts +206 -206
- package/src/types/procedure/index.ts +181 -181
- package/src/types/profile/index.ts +39 -39
- package/src/types/reviews/index.ts +130 -132
- package/src/types/tz-lookup.d.ts +4 -4
- package/src/types/user/index.ts +38 -38
- package/src/utils/TIMESTAMPS.md +176 -176
- package/src/utils/TimestampUtils.ts +241 -241
- package/src/utils/index.ts +1 -1
- package/src/validations/appointment.schema.ts +574 -574
- package/src/validations/calendar.schema.ts +225 -225
- package/src/validations/clinic.schema.ts +493 -493
- package/src/validations/common.schema.ts +25 -25
- package/src/validations/documentation-templates/index.ts +1 -1
- package/src/validations/documentation-templates/template.schema.ts +220 -220
- package/src/validations/documentation-templates.schema.ts +10 -10
- package/src/validations/index.ts +20 -20
- package/src/validations/media.schema.ts +10 -10
- package/src/validations/notification.schema.ts +90 -90
- package/src/validations/patient/aesthetic-analysis.schema.ts +55 -55
- package/src/validations/patient/medical-info.schema.ts +125 -125
- package/src/validations/patient/patient-requirements.schema.ts +84 -84
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +217 -216
- package/src/validations/practitioner.schema.ts +222 -222
- package/src/validations/procedure-product.schema.ts +41 -41
- package/src/validations/procedure.schema.ts +124 -124
- package/src/validations/profile-info.schema.ts +41 -41
- package/src/validations/reviews.schema.ts +189 -195
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
package/src/config/firebase.ts
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { FirebaseApp, initializeApp } from "firebase/app";
|
|
2
|
-
import { Firestore, getFirestore } from "firebase/firestore";
|
|
3
|
-
import { Auth, getAuth } from "firebase/auth";
|
|
4
|
-
import { Analytics, getAnalytics } from "firebase/analytics";
|
|
5
|
-
import { Platform } from "react-native";
|
|
6
|
-
import { FirebaseStorage, getStorage } from "firebase/storage";
|
|
7
|
-
import { Functions, getFunctions } from "firebase/functions";
|
|
8
|
-
|
|
9
|
-
interface FirebaseInstance {
|
|
10
|
-
app: FirebaseApp;
|
|
11
|
-
db: Firestore;
|
|
12
|
-
auth: Auth;
|
|
13
|
-
analytics: Analytics | null;
|
|
14
|
-
storage: FirebaseStorage;
|
|
15
|
-
functions: Functions;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
let firebaseInstance: FirebaseInstance | null = null;
|
|
19
|
-
|
|
20
|
-
export const initializeFirebase = (config: {
|
|
21
|
-
apiKey: string;
|
|
22
|
-
authDomain: string;
|
|
23
|
-
projectId: string;
|
|
24
|
-
storageBucket: string;
|
|
25
|
-
messagingSenderId: string;
|
|
26
|
-
appId: string;
|
|
27
|
-
measurementId?: string;
|
|
28
|
-
}): FirebaseInstance => {
|
|
29
|
-
if (!firebaseInstance) {
|
|
30
|
-
const app = initializeApp(config);
|
|
31
|
-
const db = getFirestore(app);
|
|
32
|
-
const auth = getAuth(app);
|
|
33
|
-
const storage = getStorage(app);
|
|
34
|
-
const functions = getFunctions(app);
|
|
35
|
-
|
|
36
|
-
let analytics = null;
|
|
37
|
-
if (typeof window !== "undefined" && Platform.OS === "web") {
|
|
38
|
-
analytics = getAnalytics(app);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
firebaseInstance = { app, db, auth, analytics, storage, functions };
|
|
42
|
-
}
|
|
43
|
-
return firebaseInstance;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export const getFirebaseInstance = async (): Promise<FirebaseInstance> => {
|
|
47
|
-
if (!firebaseInstance) {
|
|
48
|
-
throw new Error(
|
|
49
|
-
"Firebase nije inicijalizovan. Pozovite initializeFirebase prvo."
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
return firebaseInstance;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export const getFirebaseAuth = async (): Promise<Auth> => {
|
|
56
|
-
const instance = await getFirebaseInstance();
|
|
57
|
-
return instance.auth;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export const getFirebaseDB = async (): Promise<Firestore> => {
|
|
61
|
-
const instance = await getFirebaseInstance();
|
|
62
|
-
return instance.db;
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
export const getFirebaseApp = async (): Promise<FirebaseApp> => {
|
|
66
|
-
const instance = await getFirebaseInstance();
|
|
67
|
-
return instance.app;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export const getFirebaseStorage = async (): Promise<FirebaseStorage> => {
|
|
71
|
-
const instance = await getFirebaseInstance();
|
|
72
|
-
return instance.storage;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export const getFirebaseFunctions = async (): Promise<Functions> => {
|
|
76
|
-
const instance = await getFirebaseInstance();
|
|
77
|
-
return instance.functions;
|
|
78
|
-
};
|
|
1
|
+
import { FirebaseApp, initializeApp } from "firebase/app";
|
|
2
|
+
import { Firestore, getFirestore } from "firebase/firestore";
|
|
3
|
+
import { Auth, getAuth } from "firebase/auth";
|
|
4
|
+
import { Analytics, getAnalytics } from "firebase/analytics";
|
|
5
|
+
import { Platform } from "react-native";
|
|
6
|
+
import { FirebaseStorage, getStorage } from "firebase/storage";
|
|
7
|
+
import { Functions, getFunctions } from "firebase/functions";
|
|
8
|
+
|
|
9
|
+
interface FirebaseInstance {
|
|
10
|
+
app: FirebaseApp;
|
|
11
|
+
db: Firestore;
|
|
12
|
+
auth: Auth;
|
|
13
|
+
analytics: Analytics | null;
|
|
14
|
+
storage: FirebaseStorage;
|
|
15
|
+
functions: Functions;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let firebaseInstance: FirebaseInstance | null = null;
|
|
19
|
+
|
|
20
|
+
export const initializeFirebase = (config: {
|
|
21
|
+
apiKey: string;
|
|
22
|
+
authDomain: string;
|
|
23
|
+
projectId: string;
|
|
24
|
+
storageBucket: string;
|
|
25
|
+
messagingSenderId: string;
|
|
26
|
+
appId: string;
|
|
27
|
+
measurementId?: string;
|
|
28
|
+
}): FirebaseInstance => {
|
|
29
|
+
if (!firebaseInstance) {
|
|
30
|
+
const app = initializeApp(config);
|
|
31
|
+
const db = getFirestore(app);
|
|
32
|
+
const auth = getAuth(app);
|
|
33
|
+
const storage = getStorage(app);
|
|
34
|
+
const functions = getFunctions(app);
|
|
35
|
+
|
|
36
|
+
let analytics = null;
|
|
37
|
+
if (typeof window !== "undefined" && Platform.OS === "web") {
|
|
38
|
+
analytics = getAnalytics(app);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
firebaseInstance = { app, db, auth, analytics, storage, functions };
|
|
42
|
+
}
|
|
43
|
+
return firebaseInstance;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const getFirebaseInstance = async (): Promise<FirebaseInstance> => {
|
|
47
|
+
if (!firebaseInstance) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
"Firebase nije inicijalizovan. Pozovite initializeFirebase prvo."
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
return firebaseInstance;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const getFirebaseAuth = async (): Promise<Auth> => {
|
|
56
|
+
const instance = await getFirebaseInstance();
|
|
57
|
+
return instance.auth;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const getFirebaseDB = async (): Promise<Firestore> => {
|
|
61
|
+
const instance = await getFirebaseInstance();
|
|
62
|
+
return instance.db;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const getFirebaseApp = async (): Promise<FirebaseApp> => {
|
|
66
|
+
const instance = await getFirebaseInstance();
|
|
67
|
+
return instance.app;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export const getFirebaseStorage = async (): Promise<FirebaseStorage> => {
|
|
71
|
+
const instance = await getFirebaseInstance();
|
|
72
|
+
return instance.storage;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const getFirebaseFunctions = async (): Promise<Functions> => {
|
|
76
|
+
const instance = await getFirebaseInstance();
|
|
77
|
+
return instance.functions;
|
|
78
|
+
};
|
package/src/config/index.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export {
|
|
2
|
-
initializeFirebase,
|
|
3
|
-
getFirebaseInstance,
|
|
4
|
-
getFirebaseAuth,
|
|
5
|
-
getFirebaseDB,
|
|
6
|
-
getFirebaseApp,
|
|
7
|
-
getFirebaseStorage,
|
|
8
|
-
getFirebaseFunctions,
|
|
9
|
-
} from "./firebase";
|
|
1
|
+
export {
|
|
2
|
+
initializeFirebase,
|
|
3
|
+
getFirebaseInstance,
|
|
4
|
+
getFirebaseAuth,
|
|
5
|
+
getFirebaseDB,
|
|
6
|
+
getFirebaseApp,
|
|
7
|
+
getFirebaseStorage,
|
|
8
|
+
getFirebaseFunctions,
|
|
9
|
+
} from "./firebase";
|
package/src/errors/auth.error.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export class AuthError extends Error {
|
|
2
|
-
constructor(message: string) {
|
|
3
|
-
super(message);
|
|
4
|
-
this.name = "AuthError";
|
|
5
|
-
}
|
|
6
|
-
}
|
|
1
|
+
export class AuthError extends Error {
|
|
2
|
+
constructor(message: string) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "AuthError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
@@ -1,200 +1,200 @@
|
|
|
1
|
-
export class AuthError extends Error {
|
|
2
|
-
constructor(
|
|
3
|
-
message: string,
|
|
4
|
-
public code: string,
|
|
5
|
-
public status: number = 400
|
|
6
|
-
) {
|
|
7
|
-
super(message);
|
|
8
|
-
this.name = "AuthError";
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const AUTH_ERRORS = {
|
|
13
|
-
// Basic validation errors
|
|
14
|
-
INVALID_EMAIL: new AuthError(
|
|
15
|
-
"Email address is not in a valid format",
|
|
16
|
-
"AUTH/INVALID_EMAIL",
|
|
17
|
-
400
|
|
18
|
-
),
|
|
19
|
-
INVALID_PASSWORD: new AuthError(
|
|
20
|
-
"Password must contain at least 8 characters, one uppercase letter, one number, and one special character",
|
|
21
|
-
"AUTH/INVALID_PASSWORD",
|
|
22
|
-
400
|
|
23
|
-
),
|
|
24
|
-
INVALID_ROLE: new AuthError(
|
|
25
|
-
"Specified user role is not valid",
|
|
26
|
-
"AUTH/INVALID_ROLE",
|
|
27
|
-
400
|
|
28
|
-
),
|
|
29
|
-
UNAUTHORIZED_ROLE: new AuthError(
|
|
30
|
-
"You do not have permission to access the clinic application. This account is registered as a patient. Please use the mobile app to access your patient account.",
|
|
31
|
-
"AUTH/UNAUTHORIZED_ROLE",
|
|
32
|
-
403
|
|
33
|
-
),
|
|
34
|
-
|
|
35
|
-
// Authentication errors
|
|
36
|
-
NOT_AUTHENTICATED: new AuthError(
|
|
37
|
-
"User is not authenticated",
|
|
38
|
-
"AUTH/NOT_AUTHENTICATED",
|
|
39
|
-
401
|
|
40
|
-
),
|
|
41
|
-
SESSION_EXPIRED: new AuthError(
|
|
42
|
-
"Your session has expired. Please sign in again",
|
|
43
|
-
"AUTH/SESSION_EXPIRED",
|
|
44
|
-
401
|
|
45
|
-
),
|
|
46
|
-
INVALID_TOKEN: new AuthError(
|
|
47
|
-
"Invalid authentication token",
|
|
48
|
-
"AUTH/INVALID_TOKEN",
|
|
49
|
-
401
|
|
50
|
-
),
|
|
51
|
-
|
|
52
|
-
// User state errors
|
|
53
|
-
USER_NOT_FOUND: new AuthError(
|
|
54
|
-
"User not found in the system",
|
|
55
|
-
"AUTH/USER_NOT_FOUND",
|
|
56
|
-
404
|
|
57
|
-
),
|
|
58
|
-
EMAIL_ALREADY_EXISTS: new AuthError(
|
|
59
|
-
"An account with this email already exists",
|
|
60
|
-
"AUTH/EMAIL_EXISTS",
|
|
61
|
-
409
|
|
62
|
-
),
|
|
63
|
-
USER_DISABLED: new AuthError(
|
|
64
|
-
"This account has been disabled",
|
|
65
|
-
"AUTH/USER_DISABLED",
|
|
66
|
-
403
|
|
67
|
-
),
|
|
68
|
-
|
|
69
|
-
// Rate limiting and security
|
|
70
|
-
TOO_MANY_REQUESTS: new AuthError(
|
|
71
|
-
"Too many login attempts. Please try again later",
|
|
72
|
-
"AUTH/TOO_MANY_REQUESTS",
|
|
73
|
-
429
|
|
74
|
-
),
|
|
75
|
-
ACCOUNT_LOCKED: new AuthError(
|
|
76
|
-
"Account temporarily locked due to too many failed login attempts",
|
|
77
|
-
"AUTH/ACCOUNT_LOCKED",
|
|
78
|
-
403
|
|
79
|
-
),
|
|
80
|
-
|
|
81
|
-
// Social auth specific
|
|
82
|
-
POPUP_CLOSED: new AuthError(
|
|
83
|
-
"Authentication popup was closed before completion",
|
|
84
|
-
"AUTH/POPUP_CLOSED",
|
|
85
|
-
400
|
|
86
|
-
),
|
|
87
|
-
POPUP_BLOCKED: new AuthError(
|
|
88
|
-
"Authentication popup was blocked by the browser",
|
|
89
|
-
"AUTH/POPUP_BLOCKED",
|
|
90
|
-
400
|
|
91
|
-
),
|
|
92
|
-
ACCOUNT_EXISTS: new AuthError(
|
|
93
|
-
"An account already exists with different credentials",
|
|
94
|
-
"AUTH/ACCOUNT_EXISTS",
|
|
95
|
-
409
|
|
96
|
-
),
|
|
97
|
-
|
|
98
|
-
// Anonymous auth specific
|
|
99
|
-
NOT_ANONYMOUS: new AuthError(
|
|
100
|
-
"Current user is not anonymous",
|
|
101
|
-
"AUTH/NOT_ANONYMOUS_USER",
|
|
102
|
-
400
|
|
103
|
-
),
|
|
104
|
-
ANONYMOUS_UPGRADE_FAILED: new AuthError(
|
|
105
|
-
"Failed to upgrade anonymous account",
|
|
106
|
-
"AUTH/ANONYMOUS_UPGRADE_FAILED",
|
|
107
|
-
400
|
|
108
|
-
),
|
|
109
|
-
|
|
110
|
-
// General errors
|
|
111
|
-
VALIDATION_ERROR: new AuthError(
|
|
112
|
-
"Data validation error occurred",
|
|
113
|
-
"AUTH/VALIDATION_ERROR",
|
|
114
|
-
400
|
|
115
|
-
),
|
|
116
|
-
OPERATION_NOT_ALLOWED: new AuthError(
|
|
117
|
-
"This operation is not allowed",
|
|
118
|
-
"AUTH/OPERATION_NOT_ALLOWED",
|
|
119
|
-
403
|
|
120
|
-
),
|
|
121
|
-
NETWORK_ERROR: new AuthError(
|
|
122
|
-
"Network error occurred. Please check your connection",
|
|
123
|
-
"AUTH/NETWORK_ERROR",
|
|
124
|
-
503
|
|
125
|
-
),
|
|
126
|
-
REQUIRES_RECENT_LOGIN: new AuthError(
|
|
127
|
-
"This operation requires recent authentication. Please sign in again",
|
|
128
|
-
"AUTH/REQUIRES_RECENT_LOGIN",
|
|
129
|
-
401
|
|
130
|
-
),
|
|
131
|
-
INVALID_PROVIDER: new AuthError(
|
|
132
|
-
"Invalid authentication provider",
|
|
133
|
-
"AUTH/INVALID_PROVIDER",
|
|
134
|
-
400
|
|
135
|
-
),
|
|
136
|
-
INVALID_CREDENTIAL: new AuthError(
|
|
137
|
-
"The provided credentials are invalid or expired",
|
|
138
|
-
"AUTH/INVALID_CREDENTIAL",
|
|
139
|
-
401
|
|
140
|
-
),
|
|
141
|
-
|
|
142
|
-
// Resource not found
|
|
143
|
-
NOT_FOUND: new AuthError(
|
|
144
|
-
"The requested resource was not found",
|
|
145
|
-
"AUTH/NOT_FOUND",
|
|
146
|
-
404
|
|
147
|
-
),
|
|
148
|
-
|
|
149
|
-
// Detailed password validation errors
|
|
150
|
-
PASSWORD_LENGTH_ERROR: new AuthError(
|
|
151
|
-
"Password must be at least 8 characters long",
|
|
152
|
-
"AUTH/PASSWORD_LENGTH_ERROR",
|
|
153
|
-
400
|
|
154
|
-
),
|
|
155
|
-
PASSWORD_UPPERCASE_ERROR: new AuthError(
|
|
156
|
-
"Password must contain at least one uppercase letter",
|
|
157
|
-
"AUTH/PASSWORD_UPPERCASE_ERROR",
|
|
158
|
-
400
|
|
159
|
-
),
|
|
160
|
-
PASSWORD_NUMBER_ERROR: new AuthError(
|
|
161
|
-
"Password must contain at least one number",
|
|
162
|
-
"AUTH/PASSWORD_NUMBER_ERROR",
|
|
163
|
-
400
|
|
164
|
-
),
|
|
165
|
-
PASSWORD_SPECIAL_CHAR_ERROR: new AuthError(
|
|
166
|
-
"Password must contain at least one special character",
|
|
167
|
-
"AUTH/PASSWORD_SPECIAL_CHAR_ERROR",
|
|
168
|
-
400
|
|
169
|
-
),
|
|
170
|
-
|
|
171
|
-
// Detailed email validation errors
|
|
172
|
-
EMAIL_FORMAT_ERROR: new AuthError(
|
|
173
|
-
"Invalid email format. Please enter a valid email address",
|
|
174
|
-
"AUTH/EMAIL_FORMAT_ERROR",
|
|
175
|
-
400
|
|
176
|
-
),
|
|
177
|
-
|
|
178
|
-
PASSWORD_VALIDATION_ERROR: new AuthError(
|
|
179
|
-
"Password validation failed. Please check all requirements",
|
|
180
|
-
"AUTH/PASSWORD_VALIDATION_ERROR",
|
|
181
|
-
400
|
|
182
|
-
),
|
|
183
|
-
|
|
184
|
-
// Password reset specific errors
|
|
185
|
-
EXPIRED_ACTION_CODE: new AuthError(
|
|
186
|
-
"Kod za resetovanje lozinke je istekao. Molimo zatražite novi link za resetovanje.",
|
|
187
|
-
"AUTH/EXPIRED_ACTION_CODE",
|
|
188
|
-
400
|
|
189
|
-
),
|
|
190
|
-
INVALID_ACTION_CODE: new AuthError(
|
|
191
|
-
"Kod za resetovanje lozinke je nevažeći ili je već iskorišćen. Molimo zatražite novi link za resetovanje.",
|
|
192
|
-
"AUTH/INVALID_ACTION_CODE",
|
|
193
|
-
400
|
|
194
|
-
),
|
|
195
|
-
WEAK_PASSWORD: new AuthError(
|
|
196
|
-
"Lozinka je previše slaba. Molimo koristite jaču lozinku.",
|
|
197
|
-
"AUTH/WEAK_PASSWORD",
|
|
198
|
-
400
|
|
199
|
-
),
|
|
200
|
-
} as const;
|
|
1
|
+
export class AuthError extends Error {
|
|
2
|
+
constructor(
|
|
3
|
+
message: string,
|
|
4
|
+
public code: string,
|
|
5
|
+
public status: number = 400
|
|
6
|
+
) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "AuthError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const AUTH_ERRORS = {
|
|
13
|
+
// Basic validation errors
|
|
14
|
+
INVALID_EMAIL: new AuthError(
|
|
15
|
+
"Email address is not in a valid format",
|
|
16
|
+
"AUTH/INVALID_EMAIL",
|
|
17
|
+
400
|
|
18
|
+
),
|
|
19
|
+
INVALID_PASSWORD: new AuthError(
|
|
20
|
+
"Password must contain at least 8 characters, one uppercase letter, one number, and one special character",
|
|
21
|
+
"AUTH/INVALID_PASSWORD",
|
|
22
|
+
400
|
|
23
|
+
),
|
|
24
|
+
INVALID_ROLE: new AuthError(
|
|
25
|
+
"Specified user role is not valid",
|
|
26
|
+
"AUTH/INVALID_ROLE",
|
|
27
|
+
400
|
|
28
|
+
),
|
|
29
|
+
UNAUTHORIZED_ROLE: new AuthError(
|
|
30
|
+
"You do not have permission to access the clinic application. This account is registered as a patient. Please use the mobile app to access your patient account.",
|
|
31
|
+
"AUTH/UNAUTHORIZED_ROLE",
|
|
32
|
+
403
|
|
33
|
+
),
|
|
34
|
+
|
|
35
|
+
// Authentication errors
|
|
36
|
+
NOT_AUTHENTICATED: new AuthError(
|
|
37
|
+
"User is not authenticated",
|
|
38
|
+
"AUTH/NOT_AUTHENTICATED",
|
|
39
|
+
401
|
|
40
|
+
),
|
|
41
|
+
SESSION_EXPIRED: new AuthError(
|
|
42
|
+
"Your session has expired. Please sign in again",
|
|
43
|
+
"AUTH/SESSION_EXPIRED",
|
|
44
|
+
401
|
|
45
|
+
),
|
|
46
|
+
INVALID_TOKEN: new AuthError(
|
|
47
|
+
"Invalid authentication token",
|
|
48
|
+
"AUTH/INVALID_TOKEN",
|
|
49
|
+
401
|
|
50
|
+
),
|
|
51
|
+
|
|
52
|
+
// User state errors
|
|
53
|
+
USER_NOT_FOUND: new AuthError(
|
|
54
|
+
"User not found in the system",
|
|
55
|
+
"AUTH/USER_NOT_FOUND",
|
|
56
|
+
404
|
|
57
|
+
),
|
|
58
|
+
EMAIL_ALREADY_EXISTS: new AuthError(
|
|
59
|
+
"An account with this email already exists",
|
|
60
|
+
"AUTH/EMAIL_EXISTS",
|
|
61
|
+
409
|
|
62
|
+
),
|
|
63
|
+
USER_DISABLED: new AuthError(
|
|
64
|
+
"This account has been disabled",
|
|
65
|
+
"AUTH/USER_DISABLED",
|
|
66
|
+
403
|
|
67
|
+
),
|
|
68
|
+
|
|
69
|
+
// Rate limiting and security
|
|
70
|
+
TOO_MANY_REQUESTS: new AuthError(
|
|
71
|
+
"Too many login attempts. Please try again later",
|
|
72
|
+
"AUTH/TOO_MANY_REQUESTS",
|
|
73
|
+
429
|
|
74
|
+
),
|
|
75
|
+
ACCOUNT_LOCKED: new AuthError(
|
|
76
|
+
"Account temporarily locked due to too many failed login attempts",
|
|
77
|
+
"AUTH/ACCOUNT_LOCKED",
|
|
78
|
+
403
|
|
79
|
+
),
|
|
80
|
+
|
|
81
|
+
// Social auth specific
|
|
82
|
+
POPUP_CLOSED: new AuthError(
|
|
83
|
+
"Authentication popup was closed before completion",
|
|
84
|
+
"AUTH/POPUP_CLOSED",
|
|
85
|
+
400
|
|
86
|
+
),
|
|
87
|
+
POPUP_BLOCKED: new AuthError(
|
|
88
|
+
"Authentication popup was blocked by the browser",
|
|
89
|
+
"AUTH/POPUP_BLOCKED",
|
|
90
|
+
400
|
|
91
|
+
),
|
|
92
|
+
ACCOUNT_EXISTS: new AuthError(
|
|
93
|
+
"An account already exists with different credentials",
|
|
94
|
+
"AUTH/ACCOUNT_EXISTS",
|
|
95
|
+
409
|
|
96
|
+
),
|
|
97
|
+
|
|
98
|
+
// Anonymous auth specific
|
|
99
|
+
NOT_ANONYMOUS: new AuthError(
|
|
100
|
+
"Current user is not anonymous",
|
|
101
|
+
"AUTH/NOT_ANONYMOUS_USER",
|
|
102
|
+
400
|
|
103
|
+
),
|
|
104
|
+
ANONYMOUS_UPGRADE_FAILED: new AuthError(
|
|
105
|
+
"Failed to upgrade anonymous account",
|
|
106
|
+
"AUTH/ANONYMOUS_UPGRADE_FAILED",
|
|
107
|
+
400
|
|
108
|
+
),
|
|
109
|
+
|
|
110
|
+
// General errors
|
|
111
|
+
VALIDATION_ERROR: new AuthError(
|
|
112
|
+
"Data validation error occurred",
|
|
113
|
+
"AUTH/VALIDATION_ERROR",
|
|
114
|
+
400
|
|
115
|
+
),
|
|
116
|
+
OPERATION_NOT_ALLOWED: new AuthError(
|
|
117
|
+
"This operation is not allowed",
|
|
118
|
+
"AUTH/OPERATION_NOT_ALLOWED",
|
|
119
|
+
403
|
|
120
|
+
),
|
|
121
|
+
NETWORK_ERROR: new AuthError(
|
|
122
|
+
"Network error occurred. Please check your connection",
|
|
123
|
+
"AUTH/NETWORK_ERROR",
|
|
124
|
+
503
|
|
125
|
+
),
|
|
126
|
+
REQUIRES_RECENT_LOGIN: new AuthError(
|
|
127
|
+
"This operation requires recent authentication. Please sign in again",
|
|
128
|
+
"AUTH/REQUIRES_RECENT_LOGIN",
|
|
129
|
+
401
|
|
130
|
+
),
|
|
131
|
+
INVALID_PROVIDER: new AuthError(
|
|
132
|
+
"Invalid authentication provider",
|
|
133
|
+
"AUTH/INVALID_PROVIDER",
|
|
134
|
+
400
|
|
135
|
+
),
|
|
136
|
+
INVALID_CREDENTIAL: new AuthError(
|
|
137
|
+
"The provided credentials are invalid or expired",
|
|
138
|
+
"AUTH/INVALID_CREDENTIAL",
|
|
139
|
+
401
|
|
140
|
+
),
|
|
141
|
+
|
|
142
|
+
// Resource not found
|
|
143
|
+
NOT_FOUND: new AuthError(
|
|
144
|
+
"The requested resource was not found",
|
|
145
|
+
"AUTH/NOT_FOUND",
|
|
146
|
+
404
|
|
147
|
+
),
|
|
148
|
+
|
|
149
|
+
// Detailed password validation errors
|
|
150
|
+
PASSWORD_LENGTH_ERROR: new AuthError(
|
|
151
|
+
"Password must be at least 8 characters long",
|
|
152
|
+
"AUTH/PASSWORD_LENGTH_ERROR",
|
|
153
|
+
400
|
|
154
|
+
),
|
|
155
|
+
PASSWORD_UPPERCASE_ERROR: new AuthError(
|
|
156
|
+
"Password must contain at least one uppercase letter",
|
|
157
|
+
"AUTH/PASSWORD_UPPERCASE_ERROR",
|
|
158
|
+
400
|
|
159
|
+
),
|
|
160
|
+
PASSWORD_NUMBER_ERROR: new AuthError(
|
|
161
|
+
"Password must contain at least one number",
|
|
162
|
+
"AUTH/PASSWORD_NUMBER_ERROR",
|
|
163
|
+
400
|
|
164
|
+
),
|
|
165
|
+
PASSWORD_SPECIAL_CHAR_ERROR: new AuthError(
|
|
166
|
+
"Password must contain at least one special character",
|
|
167
|
+
"AUTH/PASSWORD_SPECIAL_CHAR_ERROR",
|
|
168
|
+
400
|
|
169
|
+
),
|
|
170
|
+
|
|
171
|
+
// Detailed email validation errors
|
|
172
|
+
EMAIL_FORMAT_ERROR: new AuthError(
|
|
173
|
+
"Invalid email format. Please enter a valid email address",
|
|
174
|
+
"AUTH/EMAIL_FORMAT_ERROR",
|
|
175
|
+
400
|
|
176
|
+
),
|
|
177
|
+
|
|
178
|
+
PASSWORD_VALIDATION_ERROR: new AuthError(
|
|
179
|
+
"Password validation failed. Please check all requirements",
|
|
180
|
+
"AUTH/PASSWORD_VALIDATION_ERROR",
|
|
181
|
+
400
|
|
182
|
+
),
|
|
183
|
+
|
|
184
|
+
// Password reset specific errors
|
|
185
|
+
EXPIRED_ACTION_CODE: new AuthError(
|
|
186
|
+
"Kod za resetovanje lozinke je istekao. Molimo zatražite novi link za resetovanje.",
|
|
187
|
+
"AUTH/EXPIRED_ACTION_CODE",
|
|
188
|
+
400
|
|
189
|
+
),
|
|
190
|
+
INVALID_ACTION_CODE: new AuthError(
|
|
191
|
+
"Kod za resetovanje lozinke je nevažeći ili je već iskorišćen. Molimo zatražite novi link za resetovanje.",
|
|
192
|
+
"AUTH/INVALID_ACTION_CODE",
|
|
193
|
+
400
|
|
194
|
+
),
|
|
195
|
+
WEAK_PASSWORD: new AuthError(
|
|
196
|
+
"Lozinka je previše slaba. Molimo koristite jaču lozinku.",
|
|
197
|
+
"AUTH/WEAK_PASSWORD",
|
|
198
|
+
400
|
|
199
|
+
),
|
|
200
|
+
} as const;
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
export const CLINIC_ADMIN_ERRORS = {
|
|
2
|
-
NOT_FOUND: "Clinic admin not found",
|
|
3
|
-
ALREADY_EXISTS: "Clinic admin already exists",
|
|
4
|
-
INVALID_DATA: "Invalid clinic admin data",
|
|
5
|
-
UNAUTHORIZED: "Unauthorized to perform this action",
|
|
6
|
-
CLINIC_NOT_FOUND: "Clinic not found",
|
|
7
|
-
CLINIC_ALREADY_MANAGED: "Clinic is already managed by this admin",
|
|
8
|
-
CLINIC_NOT_MANAGED: "Clinic is not managed by this admin",
|
|
9
|
-
} as const;
|
|
10
|
-
|
|
11
|
-
export const CLINIC_GROUP_ERRORS = {
|
|
12
|
-
NOT_FOUND: "Clinic group not found",
|
|
13
|
-
ALREADY_EXISTS: "Clinic group already exists",
|
|
14
|
-
INVALID_DATA: "Invalid clinic group data",
|
|
15
|
-
UNAUTHORIZED: "Unauthorized to perform this action",
|
|
16
|
-
CLINIC_NOT_FOUND: "Clinic not found",
|
|
17
|
-
CLINIC_ALREADY_IN_GROUP: "Clinic is already in this group",
|
|
18
|
-
CLINIC_NOT_IN_GROUP: "Clinic is not in this group",
|
|
19
|
-
ADMIN_ALREADY_IN_GROUP: "Admin is already in this group",
|
|
20
|
-
ADMIN_NOT_IN_GROUP: "Admin is not in this group",
|
|
21
|
-
} as const;
|
|
22
|
-
|
|
23
|
-
export const CLINIC_ERRORS = {
|
|
24
|
-
NOT_FOUND: "Clinic not found",
|
|
25
|
-
ALREADY_EXISTS: "Clinic already exists",
|
|
26
|
-
INVALID_DATA: "Invalid clinic data",
|
|
27
|
-
UNAUTHORIZED: "Unauthorized to perform this action",
|
|
28
|
-
TAG_ALREADY_EXISTS: "Tag already exists",
|
|
29
|
-
TAG_NOT_FOUND: "Tag not found",
|
|
30
|
-
CUSTOM_TAG_ALREADY_EXISTS: "Custom tag already exists",
|
|
31
|
-
CUSTOM_TAG_NOT_FOUND: "Custom tag not found",
|
|
32
|
-
} as const;
|
|
1
|
+
export const CLINIC_ADMIN_ERRORS = {
|
|
2
|
+
NOT_FOUND: "Clinic admin not found",
|
|
3
|
+
ALREADY_EXISTS: "Clinic admin already exists",
|
|
4
|
+
INVALID_DATA: "Invalid clinic admin data",
|
|
5
|
+
UNAUTHORIZED: "Unauthorized to perform this action",
|
|
6
|
+
CLINIC_NOT_FOUND: "Clinic not found",
|
|
7
|
+
CLINIC_ALREADY_MANAGED: "Clinic is already managed by this admin",
|
|
8
|
+
CLINIC_NOT_MANAGED: "Clinic is not managed by this admin",
|
|
9
|
+
} as const;
|
|
10
|
+
|
|
11
|
+
export const CLINIC_GROUP_ERRORS = {
|
|
12
|
+
NOT_FOUND: "Clinic group not found",
|
|
13
|
+
ALREADY_EXISTS: "Clinic group already exists",
|
|
14
|
+
INVALID_DATA: "Invalid clinic group data",
|
|
15
|
+
UNAUTHORIZED: "Unauthorized to perform this action",
|
|
16
|
+
CLINIC_NOT_FOUND: "Clinic not found",
|
|
17
|
+
CLINIC_ALREADY_IN_GROUP: "Clinic is already in this group",
|
|
18
|
+
CLINIC_NOT_IN_GROUP: "Clinic is not in this group",
|
|
19
|
+
ADMIN_ALREADY_IN_GROUP: "Admin is already in this group",
|
|
20
|
+
ADMIN_NOT_IN_GROUP: "Admin is not in this group",
|
|
21
|
+
} as const;
|
|
22
|
+
|
|
23
|
+
export const CLINIC_ERRORS = {
|
|
24
|
+
NOT_FOUND: "Clinic not found",
|
|
25
|
+
ALREADY_EXISTS: "Clinic already exists",
|
|
26
|
+
INVALID_DATA: "Invalid clinic data",
|
|
27
|
+
UNAUTHORIZED: "Unauthorized to perform this action",
|
|
28
|
+
TAG_ALREADY_EXISTS: "Tag already exists",
|
|
29
|
+
TAG_NOT_FOUND: "Tag not found",
|
|
30
|
+
CUSTOM_TAG_ALREADY_EXISTS: "Custom tag already exists",
|
|
31
|
+
CUSTOM_TAG_NOT_FOUND: "Custom tag not found",
|
|
32
|
+
} as const;
|