@blackcode_sa/metaestetics-api 1.13.5 → 1.13.8
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 +20 -1
- package/dist/admin/index.d.ts +20 -1
- package/dist/admin/index.js +217 -1
- package/dist/admin/index.mjs +217 -1
- package/dist/index.d.mts +26 -3
- package/dist/index.d.ts +26 -3
- package/dist/index.js +168 -6
- package/dist/index.mjs +168 -6
- package/package.json +121 -121
- 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 +1984 -1984
- 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 +966 -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 +689 -689
- package/src/admin/analytics/analytics.admin.service.ts +278 -278
- package/src/admin/analytics/index.ts +2 -2
- 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 +81 -81
- 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 +57 -57
- package/src/backoffice/services/analytics.service.proposal.md +863 -863
- package/src/backoffice/services/analytics.service.summary.md +143 -143
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +384 -384
- 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 +10 -10
- 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 +461 -461
- package/src/backoffice/services/technology.service.ts +1151 -1151
- 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 +67 -67
- 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 +168 -168
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +164 -164
- 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 +211 -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/analytics/ARCHITECTURE.md +199 -199
- package/src/services/analytics/CLOUD_FUNCTIONS.md +225 -225
- package/src/services/analytics/GROUPED_ANALYTICS.md +501 -501
- package/src/services/analytics/QUICK_START.md +393 -393
- package/src/services/analytics/README.md +304 -304
- package/src/services/analytics/SUMMARY.md +141 -141
- package/src/services/analytics/TRENDS.md +380 -380
- package/src/services/analytics/USAGE_GUIDE.md +518 -518
- package/src/services/analytics/analytics-cloud.service.ts +222 -222
- package/src/services/analytics/analytics.service.ts +2142 -2142
- package/src/services/analytics/index.ts +4 -4
- package/src/services/analytics/review-analytics.service.ts +941 -941
- package/src/services/analytics/utils/appointment-filtering.utils.ts +138 -138
- package/src/services/analytics/utils/cost-calculation.utils.ts +182 -182
- package/src/services/analytics/utils/grouping.utils.ts +434 -434
- package/src/services/analytics/utils/stored-analytics.utils.ts +347 -347
- package/src/services/analytics/utils/time-calculation.utils.ts +186 -186
- package/src/services/analytics/utils/trend-calculation.utils.ts +200 -200
- package/src/services/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2558 -2558
- 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 +1043 -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 +14 -14
- 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 +1799 -1742
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +2307 -2200
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +734 -734
- 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/analytics/analytics.types.ts +597 -597
- package/src/types/analytics/grouped-analytics.types.ts +173 -173
- package/src/types/analytics/index.ts +4 -4
- package/src/types/analytics/stored-analytics.types.ts +137 -137
- package/src/types/appointment/index.ts +480 -480
- package/src/types/calendar/index.ts +258 -258
- package/src/types/calendar/synced-calendar.types.ts +66 -66
- package/src/types/clinic/index.ts +498 -498
- 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 +47 -47
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +286 -286
- 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 -275
- 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 +132 -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 +494 -494
- 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 -217
- 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 +195 -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,211 @@
|
|
|
1
|
-
export class AuthError extends Error {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
"
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
"
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
"
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
"
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
"
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
"
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
"
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
"
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
"
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
"
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
1
|
+
export class AuthError extends Error {
|
|
2
|
+
public metadata?: Record<string, any>;
|
|
3
|
+
|
|
4
|
+
constructor(
|
|
5
|
+
message: string,
|
|
6
|
+
public code: string,
|
|
7
|
+
public status: number = 400,
|
|
8
|
+
metadata?: Record<string, any>
|
|
9
|
+
) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "AuthError";
|
|
12
|
+
this.metadata = metadata;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const AUTH_ERRORS = {
|
|
17
|
+
// Basic validation errors
|
|
18
|
+
INVALID_EMAIL: new AuthError(
|
|
19
|
+
"Email address is not in a valid format",
|
|
20
|
+
"AUTH/INVALID_EMAIL",
|
|
21
|
+
400
|
|
22
|
+
),
|
|
23
|
+
INVALID_PASSWORD: new AuthError(
|
|
24
|
+
"Password must contain at least 8 characters, one uppercase letter, one number, and one special character",
|
|
25
|
+
"AUTH/INVALID_PASSWORD",
|
|
26
|
+
400
|
|
27
|
+
),
|
|
28
|
+
INVALID_ROLE: new AuthError(
|
|
29
|
+
"Specified user role is not valid",
|
|
30
|
+
"AUTH/INVALID_ROLE",
|
|
31
|
+
400
|
|
32
|
+
),
|
|
33
|
+
UNAUTHORIZED_ROLE: new AuthError(
|
|
34
|
+
"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.",
|
|
35
|
+
"AUTH/UNAUTHORIZED_ROLE",
|
|
36
|
+
403
|
|
37
|
+
),
|
|
38
|
+
|
|
39
|
+
// Authentication errors
|
|
40
|
+
NOT_AUTHENTICATED: new AuthError(
|
|
41
|
+
"User is not authenticated",
|
|
42
|
+
"AUTH/NOT_AUTHENTICATED",
|
|
43
|
+
401
|
|
44
|
+
),
|
|
45
|
+
SESSION_EXPIRED: new AuthError(
|
|
46
|
+
"Your session has expired. Please sign in again",
|
|
47
|
+
"AUTH/SESSION_EXPIRED",
|
|
48
|
+
401
|
|
49
|
+
),
|
|
50
|
+
INVALID_TOKEN: new AuthError(
|
|
51
|
+
"Invalid authentication token",
|
|
52
|
+
"AUTH/INVALID_TOKEN",
|
|
53
|
+
401
|
|
54
|
+
),
|
|
55
|
+
|
|
56
|
+
// User state errors
|
|
57
|
+
USER_NOT_FOUND: new AuthError(
|
|
58
|
+
"User not found in the system",
|
|
59
|
+
"AUTH/USER_NOT_FOUND",
|
|
60
|
+
404
|
|
61
|
+
),
|
|
62
|
+
EMAIL_ALREADY_EXISTS: new AuthError(
|
|
63
|
+
"An account with this email already exists",
|
|
64
|
+
"AUTH/EMAIL_EXISTS",
|
|
65
|
+
409
|
|
66
|
+
),
|
|
67
|
+
USER_DISABLED: new AuthError(
|
|
68
|
+
"This account has been disabled",
|
|
69
|
+
"AUTH/USER_DISABLED",
|
|
70
|
+
403
|
|
71
|
+
),
|
|
72
|
+
|
|
73
|
+
// Rate limiting and security
|
|
74
|
+
TOO_MANY_REQUESTS: new AuthError(
|
|
75
|
+
"Too many login attempts. Please try again later",
|
|
76
|
+
"AUTH/TOO_MANY_REQUESTS",
|
|
77
|
+
429
|
|
78
|
+
),
|
|
79
|
+
ACCOUNT_LOCKED: new AuthError(
|
|
80
|
+
"Account temporarily locked due to too many failed login attempts",
|
|
81
|
+
"AUTH/ACCOUNT_LOCKED",
|
|
82
|
+
403
|
|
83
|
+
),
|
|
84
|
+
|
|
85
|
+
// Social auth specific
|
|
86
|
+
POPUP_CLOSED: new AuthError(
|
|
87
|
+
"Authentication popup was closed before completion",
|
|
88
|
+
"AUTH/POPUP_CLOSED",
|
|
89
|
+
400
|
|
90
|
+
),
|
|
91
|
+
POPUP_BLOCKED: new AuthError(
|
|
92
|
+
"Authentication popup was blocked by the browser",
|
|
93
|
+
"AUTH/POPUP_BLOCKED",
|
|
94
|
+
400
|
|
95
|
+
),
|
|
96
|
+
ACCOUNT_EXISTS: new AuthError(
|
|
97
|
+
"An account already exists with different credentials",
|
|
98
|
+
"AUTH/ACCOUNT_EXISTS",
|
|
99
|
+
409
|
|
100
|
+
),
|
|
101
|
+
|
|
102
|
+
// Anonymous auth specific
|
|
103
|
+
NOT_ANONYMOUS: new AuthError(
|
|
104
|
+
"Current user is not anonymous",
|
|
105
|
+
"AUTH/NOT_ANONYMOUS_USER",
|
|
106
|
+
400
|
|
107
|
+
),
|
|
108
|
+
ANONYMOUS_UPGRADE_FAILED: new AuthError(
|
|
109
|
+
"Failed to upgrade anonymous account",
|
|
110
|
+
"AUTH/ANONYMOUS_UPGRADE_FAILED",
|
|
111
|
+
400
|
|
112
|
+
),
|
|
113
|
+
|
|
114
|
+
// General errors
|
|
115
|
+
VALIDATION_ERROR: new AuthError(
|
|
116
|
+
"Data validation error occurred",
|
|
117
|
+
"AUTH/VALIDATION_ERROR",
|
|
118
|
+
400
|
|
119
|
+
),
|
|
120
|
+
OPERATION_NOT_ALLOWED: new AuthError(
|
|
121
|
+
"This operation is not allowed",
|
|
122
|
+
"AUTH/OPERATION_NOT_ALLOWED",
|
|
123
|
+
403
|
|
124
|
+
),
|
|
125
|
+
NETWORK_ERROR: new AuthError(
|
|
126
|
+
"Network error occurred. Please check your connection",
|
|
127
|
+
"AUTH/NETWORK_ERROR",
|
|
128
|
+
503
|
|
129
|
+
),
|
|
130
|
+
REQUIRES_RECENT_LOGIN: new AuthError(
|
|
131
|
+
"This operation requires recent authentication. Please sign in again",
|
|
132
|
+
"AUTH/REQUIRES_RECENT_LOGIN",
|
|
133
|
+
401
|
|
134
|
+
),
|
|
135
|
+
INVALID_PROVIDER: new AuthError(
|
|
136
|
+
"Invalid authentication provider",
|
|
137
|
+
"AUTH/INVALID_PROVIDER",
|
|
138
|
+
400
|
|
139
|
+
),
|
|
140
|
+
INVALID_CREDENTIAL: new AuthError(
|
|
141
|
+
"The provided credentials are invalid or expired",
|
|
142
|
+
"AUTH/INVALID_CREDENTIAL",
|
|
143
|
+
401
|
|
144
|
+
),
|
|
145
|
+
|
|
146
|
+
// Resource not found
|
|
147
|
+
NOT_FOUND: new AuthError(
|
|
148
|
+
"The requested resource was not found",
|
|
149
|
+
"AUTH/NOT_FOUND",
|
|
150
|
+
404
|
|
151
|
+
),
|
|
152
|
+
|
|
153
|
+
// Detailed password validation errors
|
|
154
|
+
PASSWORD_LENGTH_ERROR: new AuthError(
|
|
155
|
+
"Password must be at least 8 characters long",
|
|
156
|
+
"AUTH/PASSWORD_LENGTH_ERROR",
|
|
157
|
+
400
|
|
158
|
+
),
|
|
159
|
+
PASSWORD_UPPERCASE_ERROR: new AuthError(
|
|
160
|
+
"Password must contain at least one uppercase letter",
|
|
161
|
+
"AUTH/PASSWORD_UPPERCASE_ERROR",
|
|
162
|
+
400
|
|
163
|
+
),
|
|
164
|
+
PASSWORD_NUMBER_ERROR: new AuthError(
|
|
165
|
+
"Password must contain at least one number",
|
|
166
|
+
"AUTH/PASSWORD_NUMBER_ERROR",
|
|
167
|
+
400
|
|
168
|
+
),
|
|
169
|
+
PASSWORD_SPECIAL_CHAR_ERROR: new AuthError(
|
|
170
|
+
"Password must contain at least one special character",
|
|
171
|
+
"AUTH/PASSWORD_SPECIAL_CHAR_ERROR",
|
|
172
|
+
400
|
|
173
|
+
),
|
|
174
|
+
|
|
175
|
+
// Detailed email validation errors
|
|
176
|
+
EMAIL_FORMAT_ERROR: new AuthError(
|
|
177
|
+
"Invalid email format. Please enter a valid email address",
|
|
178
|
+
"AUTH/EMAIL_FORMAT_ERROR",
|
|
179
|
+
400
|
|
180
|
+
),
|
|
181
|
+
|
|
182
|
+
PASSWORD_VALIDATION_ERROR: new AuthError(
|
|
183
|
+
"Password validation failed. Please check all requirements",
|
|
184
|
+
"AUTH/PASSWORD_VALIDATION_ERROR",
|
|
185
|
+
400
|
|
186
|
+
),
|
|
187
|
+
|
|
188
|
+
// Password reset specific errors
|
|
189
|
+
EXPIRED_ACTION_CODE: new AuthError(
|
|
190
|
+
"Kod za resetovanje lozinke je istekao. Molimo zatražite novi link za resetovanje.",
|
|
191
|
+
"AUTH/EXPIRED_ACTION_CODE",
|
|
192
|
+
400
|
|
193
|
+
),
|
|
194
|
+
INVALID_ACTION_CODE: new AuthError(
|
|
195
|
+
"Kod za resetovanje lozinke je nevažeći ili je već iskorišćen. Molimo zatražite novi link za resetovanje.",
|
|
196
|
+
"AUTH/INVALID_ACTION_CODE",
|
|
197
|
+
400
|
|
198
|
+
),
|
|
199
|
+
WEAK_PASSWORD: new AuthError(
|
|
200
|
+
"Lozinka je previše slaba. Molimo koristite jaču lozinku.",
|
|
201
|
+
"AUTH/WEAK_PASSWORD",
|
|
202
|
+
400
|
|
203
|
+
),
|
|
204
|
+
|
|
205
|
+
// Draft profile exists error
|
|
206
|
+
DRAFT_PROFILE_EXISTS: new AuthError(
|
|
207
|
+
"A draft practitioner profile exists for this email. Please use your invitation code to claim it, or contact support if you don't have one.",
|
|
208
|
+
"AUTH/DRAFT_PROFILE_EXISTS",
|
|
209
|
+
409
|
|
210
|
+
),
|
|
211
|
+
} as const;
|