@sudobility/auth_lib 0.0.14 → 0.0.18

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.
Files changed (61) hide show
  1. package/dist/admin/index.d.ts +0 -7
  2. package/dist/admin/index.d.ts.map +1 -1
  3. package/dist/admin/index.js +1 -7
  4. package/dist/admin/index.js.map +1 -0
  5. package/dist/config/firebase-init.d.ts +0 -31
  6. package/dist/config/firebase-init.d.ts.map +1 -1
  7. package/dist/config/firebase-init.js +13 -38
  8. package/dist/config/firebase-init.js.map +1 -0
  9. package/dist/config/firebase-init.rn.d.ts +10 -0
  10. package/dist/config/firebase-init.rn.d.ts.map +1 -0
  11. package/dist/config/firebase-init.rn.js +62 -0
  12. package/dist/config/firebase-init.rn.js.map +1 -0
  13. package/dist/config/index.d.ts +0 -3
  14. package/dist/config/index.d.ts.map +1 -1
  15. package/dist/config/index.js +1 -3
  16. package/dist/config/index.js.map +1 -0
  17. package/dist/config/types.d.ts +0 -18
  18. package/dist/config/types.d.ts.map +1 -1
  19. package/dist/config/types.js +1 -3
  20. package/dist/config/types.js.map +1 -0
  21. package/dist/hooks/index.d.ts +1 -4
  22. package/dist/hooks/index.d.ts.map +1 -1
  23. package/dist/hooks/index.js +2 -4
  24. package/dist/hooks/index.js.map +1 -0
  25. package/dist/hooks/useFirebaseAuthNetworkClient.d.ts +3 -12
  26. package/dist/hooks/useFirebaseAuthNetworkClient.d.ts.map +1 -1
  27. package/dist/hooks/useFirebaseAuthNetworkClient.js +32 -51
  28. package/dist/hooks/useFirebaseAuthNetworkClient.js.map +1 -0
  29. package/dist/hooks/useSiteAdmin.d.ts +0 -46
  30. package/dist/hooks/useSiteAdmin.d.ts.map +1 -1
  31. package/dist/hooks/useSiteAdmin.js +2 -33
  32. package/dist/hooks/useSiteAdmin.js.map +1 -0
  33. package/dist/index.d.ts +1 -8
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +2 -12
  36. package/dist/index.js.map +1 -0
  37. package/dist/index.rn.d.ts +8 -0
  38. package/dist/index.rn.d.ts.map +1 -0
  39. package/dist/index.rn.js +7 -0
  40. package/dist/index.rn.js.map +1 -0
  41. package/dist/network/FirebaseAuthNetworkService.d.ts +11 -0
  42. package/dist/network/FirebaseAuthNetworkService.d.ts.map +1 -0
  43. package/dist/network/FirebaseAuthNetworkService.js +59 -0
  44. package/dist/network/FirebaseAuthNetworkService.js.map +1 -0
  45. package/dist/network/FirebaseAuthNetworkService.rn.d.ts +11 -0
  46. package/dist/network/FirebaseAuthNetworkService.rn.d.ts.map +1 -0
  47. package/dist/network/FirebaseAuthNetworkService.rn.js +58 -0
  48. package/dist/network/FirebaseAuthNetworkService.rn.js.map +1 -0
  49. package/dist/network/index.d.ts +2 -0
  50. package/dist/network/index.d.ts.map +1 -0
  51. package/dist/network/index.js +2 -0
  52. package/dist/network/index.js.map +1 -0
  53. package/dist/utils/firebase-errors.d.ts +0 -27
  54. package/dist/utils/firebase-errors.d.ts.map +1 -1
  55. package/dist/utils/firebase-errors.js +1 -28
  56. package/dist/utils/firebase-errors.js.map +1 -0
  57. package/dist/utils/index.d.ts +0 -3
  58. package/dist/utils/index.d.ts.map +1 -1
  59. package/dist/utils/index.js +1 -3
  60. package/dist/utils/index.js.map +1 -0
  61. package/package.json +21 -3
@@ -1,9 +1,2 @@
1
- /**
2
- * @fileoverview Admin utilities exports
3
- *
4
- * Re-exports admin utilities from @sudobility/types for backwards compatibility.
5
- * These utilities are now defined in @sudobility/types to be shared between
6
- * frontend (auth_lib) and backend (auth_service) packages.
7
- */
8
1
  export { parseAdminEmails, isAdminEmail, createAdminChecker, } from '@sudobility/types';
9
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
@@ -1,8 +1,2 @@
1
- /**
2
- * @fileoverview Admin utilities exports
3
- *
4
- * Re-exports admin utilities from @sudobility/types for backwards compatibility.
5
- * These utilities are now defined in @sudobility/types to be shared between
6
- * frontend (auth_lib) and backend (auth_service) packages.
7
- */
8
1
  export { parseAdminEmails, isAdminEmail, createAdminChecker, } from '@sudobility/types';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
@@ -1,40 +1,9 @@
1
- /**
2
- * @fileoverview Configurable Firebase initialization
3
- */
4
1
  import { type FirebaseApp } from 'firebase/app';
5
2
  import { type Auth } from 'firebase/auth';
6
3
  import type { FirebaseConfig, FirebaseInitOptions, FirebaseInitResult } from './types';
7
- /**
8
- * Check if Firebase is configured with the required fields
9
- */
10
4
  export declare function isFirebaseConfigured(): boolean;
11
- /**
12
- * Initialize Firebase Auth with the provided configuration.
13
- * This should be called once at app startup (e.g., in main.tsx).
14
- *
15
- * @param options - Firebase initialization options
16
- * @returns Firebase app and auth instances
17
- * @throws Error if Firebase is already initialized with different config
18
- */
19
5
  export declare function initializeFirebaseAuth(options: FirebaseInitOptions): FirebaseInitResult;
20
- /**
21
- * Get the Firebase app instance.
22
- * Must call initializeFirebaseAuth() first.
23
- *
24
- * @returns Firebase app instance or null if not initialized
25
- */
26
6
  export declare function getFirebaseApp(): FirebaseApp | null;
27
- /**
28
- * Get the Firebase auth instance.
29
- * Must call initializeFirebaseAuth() first.
30
- *
31
- * @returns Firebase auth instance or null if not initialized
32
- */
33
7
  export declare function getFirebaseAuth(): Auth | null;
34
- /**
35
- * Get the current Firebase configuration.
36
- *
37
- * @returns Firebase config or null if not initialized
38
- */
39
8
  export declare function getFirebaseConfig(): FirebaseConfig | null;
40
9
  //# sourceMappingURL=firebase-init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firebase-init.d.ts","sourceRoot":"","sources":["../../src/config/firebase-init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAkC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,KAAK,IAAI,EAAW,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAOjB;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAS9C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CAyBpB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,IAAI,GAAG,IAAI,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD"}
1
+ {"version":3,"file":"firebase-init.d.ts","sourceRoot":"","sources":["../../src/config/firebase-init.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAkC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,KAAK,IAAI,EAA+B,MAAM,eAAe,CAAC;AAEvE,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAUjB,wBAAgB,oBAAoB,IAAI,OAAO,CAS9C;AAUD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CAwCpB;AAQD,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAQD,wBAAgB,eAAe,IAAI,IAAI,GAAG,IAAI,CAE7C;AAOD,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD"}
@@ -1,15 +1,9 @@
1
- /**
2
- * @fileoverview Configurable Firebase initialization
3
- */
4
1
  import { getApp, getApps, initializeApp } from 'firebase/app';
5
- import { getAuth } from 'firebase/auth';
6
- // Singleton state
2
+ import { getAuth, onAuthStateChanged } from 'firebase/auth';
3
+ import { getFirebaseService } from '@sudobility/di';
7
4
  let firebaseApp = null;
8
5
  let firebaseAuth = null;
9
6
  let firebaseConfig = null;
10
- /**
11
- * Check if Firebase is configured with the required fields
12
- */
13
7
  export function isFirebaseConfigured() {
14
8
  if (!firebaseConfig)
15
9
  return false;
@@ -21,55 +15,36 @@ export function isFirebaseConfigured() {
21
15
  ];
22
16
  return requiredFields.every(field => !!firebaseConfig?.[field]);
23
17
  }
24
- /**
25
- * Initialize Firebase Auth with the provided configuration.
26
- * This should be called once at app startup (e.g., in main.tsx).
27
- *
28
- * @param options - Firebase initialization options
29
- * @returns Firebase app and auth instances
30
- * @throws Error if Firebase is already initialized with different config
31
- */
32
18
  export function initializeFirebaseAuth(options) {
33
19
  const { config } = options;
34
- // Store the config
35
20
  firebaseConfig = config;
36
- // Check if already initialized
37
21
  if (firebaseApp && firebaseAuth) {
38
22
  return { app: firebaseApp, auth: firebaseAuth };
39
23
  }
40
- // Validate configuration
41
24
  if (!isFirebaseConfigured()) {
42
25
  throw new Error('[auth_lib] Firebase configuration is incomplete. Required fields: apiKey, authDomain, projectId, appId');
43
26
  }
44
- // Initialize Firebase app (avoid duplicate initialization)
45
27
  firebaseApp = getApps().length === 0 ? initializeApp(config) : getApp();
46
- // Initialize Firebase Auth
47
28
  firebaseAuth = getAuth(firebaseApp);
29
+ onAuthStateChanged(firebaseAuth, user => {
30
+ try {
31
+ const firebaseService = getFirebaseService();
32
+ if (user) {
33
+ firebaseService.analytics.setUserId(user.uid);
34
+ }
35
+ }
36
+ catch {
37
+ }
38
+ });
48
39
  return { app: firebaseApp, auth: firebaseAuth };
49
40
  }
50
- /**
51
- * Get the Firebase app instance.
52
- * Must call initializeFirebaseAuth() first.
53
- *
54
- * @returns Firebase app instance or null if not initialized
55
- */
56
41
  export function getFirebaseApp() {
57
42
  return firebaseApp;
58
43
  }
59
- /**
60
- * Get the Firebase auth instance.
61
- * Must call initializeFirebaseAuth() first.
62
- *
63
- * @returns Firebase auth instance or null if not initialized
64
- */
65
44
  export function getFirebaseAuth() {
66
45
  return firebaseAuth;
67
46
  }
68
- /**
69
- * Get the current Firebase configuration.
70
- *
71
- * @returns Firebase config or null if not initialized
72
- */
73
47
  export function getFirebaseConfig() {
74
48
  return firebaseConfig;
75
49
  }
50
+ //# sourceMappingURL=firebase-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-init.js","sourceRoot":"","sources":["../../src/config/firebase-init.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAa,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAQpD,IAAI,WAAW,GAAuB,IAAI,CAAC;AAC3C,IAAI,YAAY,GAAgB,IAAI,CAAC;AACrC,IAAI,cAAc,GAA0B,IAAI,CAAC;AAKjD,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,cAAc,GAA6B;QAC/C,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,OAAO;KACR,CAAC;IACF,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAUD,MAAM,UAAU,sBAAsB,CACpC,OAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAG3B,cAAc,GAAG,MAAM,CAAC;IAGxB,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAClD,CAAC;IAGD,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;IACJ,CAAC;IAGD,WAAW,GAAG,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAGxE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAGpC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;YAC7C,IAAI,IAAI,EAAE,CAAC;gBAET,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChD,CAAC;QAGH,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAClD,CAAC;AAQD,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAQD,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC;AACtB,CAAC;AAOD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { FirebaseInitOptions, FirebaseInitResult } from './types.js';
2
+ type RNFirebaseAuth = any;
3
+ type RNFirebaseApp = any;
4
+ export declare function isFirebaseConfigured(): boolean;
5
+ export declare function initializeFirebaseAuth(_options?: FirebaseInitOptions): FirebaseInitResult;
6
+ export declare function getFirebaseApp(): RNFirebaseApp | null;
7
+ export declare function getFirebaseAuth(): RNFirebaseAuth | null;
8
+ export declare function getFirebaseConfig(): null;
9
+ export {};
10
+ //# sourceMappingURL=firebase-init.rn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-init.rn.d.ts","sourceRoot":"","sources":["../../src/config/firebase-init.rn.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAI1E,KAAK,cAAc,GAAG,GAAG,CAAC;AAE1B,KAAK,aAAa,GAAG,GAAG,CAAC;AA0CzB,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAUD,wBAAgB,sBAAsB,CACpC,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,kBAAkB,CA+BpB;AAMD,wBAAgB,cAAc,IAAI,aAAa,GAAG,IAAI,CAErD;AAMD,wBAAgB,eAAe,IAAI,cAAc,GAAG,IAAI,CAEvD;AAMD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,62 @@
1
+ import { getFirebaseService } from '@sudobility/di';
2
+ let firebaseAuth = null;
3
+ let firebaseApp = null;
4
+ let initialized = false;
5
+ function getAuthModule() {
6
+ if (!firebaseAuth) {
7
+ try {
8
+ const authModule = require('@react-native-firebase/auth');
9
+ firebaseAuth = authModule.default ? authModule.default() : authModule();
10
+ }
11
+ catch (e) {
12
+ console.warn('[auth_lib] @react-native-firebase/auth not available:', e);
13
+ }
14
+ }
15
+ return firebaseAuth;
16
+ }
17
+ function getAppModule() {
18
+ if (!firebaseApp) {
19
+ try {
20
+ const appModule = require('@react-native-firebase/app');
21
+ firebaseApp = appModule.default ? appModule.default() : appModule;
22
+ }
23
+ catch (e) {
24
+ console.warn('[auth_lib] @react-native-firebase/app not available:', e);
25
+ }
26
+ }
27
+ return firebaseApp;
28
+ }
29
+ export function isFirebaseConfigured() {
30
+ return getAppModule() !== null;
31
+ }
32
+ export function initializeFirebaseAuth(_options) {
33
+ const app = getAppModule();
34
+ const auth = getAuthModule();
35
+ if (!app || !auth) {
36
+ throw new Error('[auth_lib] React Native Firebase is not available. Make sure @react-native-firebase/app and @react-native-firebase/auth are installed.');
37
+ }
38
+ if (!initialized) {
39
+ auth.onAuthStateChanged((user) => {
40
+ try {
41
+ const firebaseService = getFirebaseService();
42
+ if (user) {
43
+ firebaseService.analytics.setUserId(user.uid);
44
+ }
45
+ }
46
+ catch {
47
+ }
48
+ });
49
+ initialized = true;
50
+ }
51
+ return { app, auth };
52
+ }
53
+ export function getFirebaseApp() {
54
+ return getAppModule();
55
+ }
56
+ export function getFirebaseAuth() {
57
+ return getAuthModule();
58
+ }
59
+ export function getFirebaseConfig() {
60
+ return null;
61
+ }
62
+ //# sourceMappingURL=firebase-init.rn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-init.rn.js","sourceRoot":"","sources":["../../src/config/firebase-init.rn.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAUpD,IAAI,YAAY,GAA0B,IAAI,CAAC;AAC/C,IAAI,WAAW,GAAyB,IAAI,CAAC;AAC7C,IAAI,WAAW,GAAG,KAAK,CAAC;AAKxB,SAAS,aAAa;IACpB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,CAAC;YAEH,MAAM,UAAU,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAC1D,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAKD,SAAS,YAAY;IACnB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC;YAEH,MAAM,SAAS,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;YACxD,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAKD,MAAM,UAAU,oBAAoB;IAClC,OAAO,YAAY,EAAE,KAAK,IAAI,CAAC;AACjC,CAAC;AAUD,MAAM,UAAU,sBAAsB,CACpC,QAA8B;IAG9B,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAE7B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,wIAAwI,CACzI,CAAC;IACJ,CAAC;IAGD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAA4B,EAAE,EAAE;YACvD,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;gBAC7C,IAAI,IAAI,EAAE,CAAC;oBAET,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChD,CAAC;YAGH,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;QACH,CAAC,CAAC,CAAC;QACH,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IAGD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAwB,CAAC;AAC7C,CAAC;AAMD,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC;AAMD,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAMD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,6 +1,3 @@
1
- /**
2
- * @fileoverview Config exports
3
- */
4
1
  export { initializeFirebaseAuth, getFirebaseApp, getFirebaseAuth, getFirebaseConfig, isFirebaseConfigured, } from './firebase-init';
5
2
  export type { FirebaseConfig, FirebaseInitOptions, FirebaseInitResult, FirebaseAuthNetworkClientOptions, } from './types';
6
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,SAAS,CAAC"}
@@ -1,4 +1,2 @@
1
- /**
2
- * @fileoverview Config exports
3
- */
4
1
  export { initializeFirebaseAuth, getFirebaseApp, getFirebaseAuth, getFirebaseConfig, isFirebaseConfigured, } from './firebase-init';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
@@ -1,11 +1,5 @@
1
- /**
2
- * @fileoverview Type definitions for auth_lib
3
- */
4
1
  import type { Auth } from 'firebase/auth';
5
2
  import type { FirebaseApp } from 'firebase/app';
6
- /**
7
- * Firebase configuration object
8
- */
9
3
  export interface FirebaseConfig {
10
4
  apiKey: string;
11
5
  authDomain: string;
@@ -15,27 +9,15 @@ export interface FirebaseConfig {
15
9
  appId: string;
16
10
  measurementId?: string;
17
11
  }
18
- /**
19
- * Options for initializing Firebase Auth
20
- */
21
12
  export interface FirebaseInitOptions {
22
- /** Firebase configuration */
23
13
  config: FirebaseConfig;
24
14
  }
25
- /**
26
- * Result of Firebase initialization
27
- */
28
15
  export interface FirebaseInitResult {
29
16
  app: FirebaseApp;
30
17
  auth: Auth;
31
18
  }
32
- /**
33
- * Options for the Firebase Auth network client hook
34
- */
35
19
  export interface FirebaseAuthNetworkClientOptions {
36
- /** Callback when user is logged out due to 403 */
37
20
  onLogout?: () => void;
38
- /** Callback when token refresh fails */
39
21
  onTokenRefreshFailed?: (error: unknown) => void;
40
22
  }
41
23
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,MAAM,WAAW,mBAAmB;IAElC,MAAM,EAAE,cAAc,CAAC;CACxB;AAKD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAKD,MAAM,WAAW,gCAAgC;IAE/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD"}
@@ -1,4 +1,2 @@
1
- /**
2
- * @fileoverview Type definitions for auth_lib
3
- */
4
1
  export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":""}
@@ -1,6 +1,3 @@
1
- /**
2
- * @fileoverview Hooks exports
3
- */
4
- export { useFirebaseAuthNetworkClient } from './useFirebaseAuthNetworkClient';
1
+ export { useFirebaseAuthNetworkClient, createFirebaseAuthNetworkClient, } from './useFirebaseAuthNetworkClient';
5
2
  export { useSiteAdmin, siteAdminQueryKey, type UseSiteAdminOptions, type UseSiteAdminResult, type UserInfoResponse, } from './useSiteAdmin';
6
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC"}
@@ -1,5 +1,3 @@
1
- /**
2
- * @fileoverview Hooks exports
3
- */
4
- export { useFirebaseAuthNetworkClient } from './useFirebaseAuthNetworkClient';
1
+ export { useFirebaseAuthNetworkClient, createFirebaseAuthNetworkClient, } from './useFirebaseAuthNetworkClient';
5
2
  export { useSiteAdmin, siteAdminQueryKey, } from './useSiteAdmin';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,EACZ,iBAAiB,GAIlB,MAAM,gBAAgB,CAAC"}
@@ -1,16 +1,7 @@
1
- /**
2
- * @fileoverview Hook to provide a resilient network client with automatic token refresh and logout handling.
3
- *
4
- * - On 401 (Unauthorized): Force refresh Firebase token and retry once
5
- * - On 403 (Forbidden): Log the user out
6
- */
7
1
  import type { NetworkClient } from '@sudobility/types';
8
2
  import type { FirebaseAuthNetworkClientOptions } from '../config/types';
9
- /**
10
- * Hook to get a Firebase Auth network client with automatic 401 retry and 403 logout.
11
- *
12
- * @param options - Optional callbacks for logout and token refresh failure
13
- * @returns NetworkClient instance
14
- */
3
+ export declare function createFirebaseAuthNetworkClient(platformNetwork?: {
4
+ request: (url: string, options?: RequestInit) => Promise<Response>;
5
+ }, options?: FirebaseAuthNetworkClientOptions): NetworkClient;
15
6
  export declare function useFirebaseAuthNetworkClient(options?: FirebaseAuthNetworkClientOptions): NetworkClient;
16
7
  //# sourceMappingURL=useFirebaseAuthNetworkClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFirebaseAuthNetworkClient.d.ts","sourceRoot":"","sources":["../../src/hooks/useFirebaseAuthNetworkClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAyLxE;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,CAAC,EAAE,gCAAgC,GACzC,aAAa,CAEf"}
1
+ {"version":3,"file":"useFirebaseAuthNetworkClient.d.ts","sourceRoot":"","sources":["../../src/hooks/useFirebaseAuthNetworkClient.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AA2CxE,wBAAgB,+BAA+B,CAC7C,eAAe,CAAC,EAAE;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACpE,EACD,OAAO,CAAC,EAAE,gCAAgC,GACzC,aAAa,CA6If;AAQD,wBAAgB,4BAA4B,CAC1C,OAAO,CAAC,EAAE,gCAAgC,GACzC,aAAa,CAKf"}
@@ -1,17 +1,7 @@
1
- /**
2
- * @fileoverview Hook to provide a resilient network client with automatic token refresh and logout handling.
3
- *
4
- * - On 401 (Unauthorized): Force refresh Firebase token and retry once
5
- * - On 403 (Forbidden): Log the user out
6
- */
7
1
  import { useMemo } from 'react';
8
2
  import { getNetworkService } from '@sudobility/di';
9
3
  import { signOut } from 'firebase/auth';
10
4
  import { getFirebaseAuth } from '../config/firebase-init';
11
- /**
12
- * Get a fresh Firebase ID token with force refresh.
13
- * Returns empty string if not authenticated.
14
- */
15
5
  async function getAuthToken(forceRefresh = false) {
16
6
  const auth = getFirebaseAuth();
17
7
  const user = auth?.currentUser;
@@ -25,9 +15,6 @@ async function getAuthToken(forceRefresh = false) {
25
15
  return '';
26
16
  }
27
17
  }
28
- /**
29
- * Log the user out via Firebase.
30
- */
31
18
  async function logoutUser(onLogout) {
32
19
  const auth = getFirebaseAuth();
33
20
  if (!auth)
@@ -40,12 +27,8 @@ async function logoutUser(onLogout) {
40
27
  console.error('[useFirebaseAuthNetworkClient] Failed to sign out:', err);
41
28
  }
42
29
  }
43
- /**
44
- * Create a network client adapter that wraps the platform network client
45
- * with 401 retry and 403 logout handling.
46
- */
47
- function createFirebaseAuthNetworkClient(options) {
48
- const platformNetwork = getNetworkService();
30
+ export function createFirebaseAuthNetworkClient(platformNetwork, options) {
31
+ const network = platformNetwork ?? getNetworkService();
49
32
  const parseResponse = async (response) => {
50
33
  let data;
51
34
  const contentType = response.headers.get('content-type');
@@ -54,7 +37,6 @@ function createFirebaseAuthNetworkClient(options) {
54
37
  data = (await response.json());
55
38
  }
56
39
  catch {
57
- // JSON parse failed, leave data undefined
58
40
  }
59
41
  }
60
42
  const headers = {};
@@ -71,14 +53,8 @@ function createFirebaseAuthNetworkClient(options) {
71
53
  timestamp: new Date().toISOString(),
72
54
  };
73
55
  };
74
- /**
75
- * Execute request with retry logic:
76
- * - On 401: Force refresh token and retry once
77
- * - On 403: Log user out (no retry)
78
- */
79
56
  const executeWithRetry = async (url, requestInit) => {
80
- const response = await platformNetwork.request(url, requestInit);
81
- // On 401, get fresh token and retry once
57
+ const response = await network.request(url, requestInit);
82
58
  if (response.status === 401) {
83
59
  const freshToken = await getAuthToken(true);
84
60
  if (freshToken) {
@@ -86,22 +62,19 @@ function createFirebaseAuthNetworkClient(options) {
86
62
  ...requestInit.headers,
87
63
  Authorization: `Bearer ${freshToken}`,
88
64
  };
89
- const retryResponse = await platformNetwork.request(url, {
65
+ const retryResponse = await network.request(url, {
90
66
  ...requestInit,
91
67
  headers: retryHeaders,
92
68
  });
93
69
  return parseResponse(retryResponse);
94
70
  }
95
71
  else {
96
- // Token refresh failed
97
72
  options?.onTokenRefreshFailed?.(new Error('Failed to refresh token'));
98
73
  }
99
74
  }
100
- // On 403, log the user out
101
75
  if (response.status === 403) {
102
76
  console.warn('[useFirebaseAuthNetworkClient] 403 Forbidden - logging user out');
103
77
  await logoutUser(options?.onLogout);
104
- // Return the original response so the UI can handle it
105
78
  }
106
79
  return parseResponse(response);
107
80
  };
@@ -109,54 +82,62 @@ function createFirebaseAuthNetworkClient(options) {
109
82
  async request(url, reqOptions) {
110
83
  const requestInit = {
111
84
  method: reqOptions?.method ?? 'GET',
112
- headers: reqOptions?.headers ?? undefined,
113
- body: reqOptions?.body ?? undefined,
114
- signal: reqOptions?.signal ?? undefined,
115
85
  };
86
+ if (reqOptions?.headers)
87
+ requestInit.headers = reqOptions.headers;
88
+ if (reqOptions?.body)
89
+ requestInit.body = reqOptions.body;
90
+ if (reqOptions?.signal)
91
+ requestInit.signal = reqOptions.signal;
116
92
  return executeWithRetry(url, requestInit);
117
93
  },
118
94
  async get(url, reqOptions) {
119
95
  const requestInit = {
120
96
  method: 'GET',
121
- headers: reqOptions?.headers ?? undefined,
122
- signal: reqOptions?.signal ?? undefined,
123
97
  };
98
+ if (reqOptions?.headers)
99
+ requestInit.headers = reqOptions.headers;
100
+ if (reqOptions?.signal)
101
+ requestInit.signal = reqOptions.signal;
124
102
  return executeWithRetry(url, requestInit);
125
103
  },
126
104
  async post(url, body, reqOptions) {
127
105
  const requestInit = {
128
106
  method: 'POST',
129
- headers: reqOptions?.headers ?? undefined,
130
- body: body ? JSON.stringify(body) : undefined,
131
- signal: reqOptions?.signal ?? undefined,
132
107
  };
108
+ if (reqOptions?.headers)
109
+ requestInit.headers = reqOptions.headers;
110
+ if (body)
111
+ requestInit.body = JSON.stringify(body);
112
+ if (reqOptions?.signal)
113
+ requestInit.signal = reqOptions.signal;
133
114
  return executeWithRetry(url, requestInit);
134
115
  },
135
116
  async put(url, body, reqOptions) {
136
117
  const requestInit = {
137
118
  method: 'PUT',
138
- headers: reqOptions?.headers ?? undefined,
139
- body: body ? JSON.stringify(body) : undefined,
140
- signal: reqOptions?.signal ?? undefined,
141
119
  };
120
+ if (reqOptions?.headers)
121
+ requestInit.headers = reqOptions.headers;
122
+ if (body)
123
+ requestInit.body = JSON.stringify(body);
124
+ if (reqOptions?.signal)
125
+ requestInit.signal = reqOptions.signal;
142
126
  return executeWithRetry(url, requestInit);
143
127
  },
144
128
  async delete(url, reqOptions) {
145
129
  const requestInit = {
146
130
  method: 'DELETE',
147
- headers: reqOptions?.headers ?? undefined,
148
- signal: reqOptions?.signal ?? undefined,
149
131
  };
132
+ if (reqOptions?.headers)
133
+ requestInit.headers = reqOptions.headers;
134
+ if (reqOptions?.signal)
135
+ requestInit.signal = reqOptions.signal;
150
136
  return executeWithRetry(url, requestInit);
151
137
  },
152
138
  };
153
139
  }
154
- /**
155
- * Hook to get a Firebase Auth network client with automatic 401 retry and 403 logout.
156
- *
157
- * @param options - Optional callbacks for logout and token refresh failure
158
- * @returns NetworkClient instance
159
- */
160
140
  export function useFirebaseAuthNetworkClient(options) {
161
- return useMemo(() => createFirebaseAuthNetworkClient(options), [options]);
141
+ return useMemo(() => createFirebaseAuthNetworkClient(undefined, options), [options]);
162
142
  }
143
+ //# sourceMappingURL=useFirebaseAuthNetworkClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFirebaseAuthNetworkClient.js","sourceRoot":"","sources":["../../src/hooks/useFirebaseAuthNetworkClient.ts"],"names":[],"mappings":"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"}
@@ -1,67 +1,21 @@
1
- /**
2
- * @fileoverview Hook to check if the current user is a site admin.
3
- *
4
- * Fetches user info from the backend API and caches the result using TanStack Query.
5
- * This provides a single source of truth for site admin status from the backend.
6
- */
7
1
  import type { NetworkClient, UserInfoResponse } from '@sudobility/types';
8
2
  export type { UserInfoResponse } from '@sudobility/types';
9
- /**
10
- * Options for useSiteAdmin hook
11
- */
12
3
  export interface UseSiteAdminOptions {
13
- /** Network client for making API requests */
14
4
  networkClient: NetworkClient;
15
- /** Base URL of the API (e.g., "https://api.example.com/api/v1") */
16
5
  baseUrl: string;
17
- /** Firebase user ID */
18
6
  userId: string | undefined;
19
- /** Firebase ID token for authentication */
20
7
  token: string | undefined;
21
- /** Cache time in milliseconds (default: 5 minutes) */
22
8
  staleTime?: number;
23
- /** Whether to enable the query (default: true when userId and token are provided) */
24
9
  enabled?: boolean;
25
10
  }
26
- /**
27
- * Return type for useSiteAdmin hook
28
- */
29
11
  export interface UseSiteAdminResult {
30
- /** Whether the user is a site admin */
31
12
  isSiteAdmin: boolean;
32
- /** Full user info from the API */
33
13
  userInfo: UserInfoResponse | null;
34
- /** Whether the query is loading */
35
14
  isLoading: boolean;
36
- /** Whether the query has an error */
37
15
  isError: boolean;
38
- /** Error object if query failed */
39
16
  error: Error | null;
40
- /** Refetch the user info */
41
17
  refetch: () => void;
42
18
  }
43
- /**
44
- * Query key for site admin queries
45
- */
46
19
  export declare const siteAdminQueryKey: (userId: string) => readonly ["siteAdmin", string];
47
- /**
48
- * Hook to check if the current user is a site admin.
49
- *
50
- * Fetches user info from the backend /users/:userId endpoint and caches the result.
51
- * The backend is the single source of truth for site admin status.
52
- *
53
- * @example
54
- * ```tsx
55
- * const { isSiteAdmin, isLoading } = useSiteAdmin({
56
- * networkClient,
57
- * baseUrl: 'https://api.example.com/api/v1',
58
- * userId: user?.uid,
59
- * token: idToken,
60
- * });
61
- *
62
- * if (isLoading) return <Loading />;
63
- * if (isSiteAdmin) return <AdminPanel />;
64
- * ```
65
- */
66
20
  export declare function useSiteAdmin(options: UseSiteAdminOptions): UseSiteAdminResult;
67
21
  //# sourceMappingURL=useSiteAdmin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSiteAdmin.d.ts","sourceRoot":"","sources":["../../src/hooks/useSiteAdmin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAW1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,aAAa,EAAE,aAAa,CAAC;IAC7B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,kCAAkC;IAClC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,mCAChB,CAAC;AAEjC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAqD7E"}
1
+ {"version":3,"file":"useSiteAdmin.d.ts","sourceRoot":"","sources":["../../src/hooks/useSiteAdmin.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAc1D,MAAM,WAAW,mBAAmB;IAElC,aAAa,EAAE,aAAa,CAAC;IAE7B,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAKD,MAAM,WAAW,kBAAkB;IAEjC,WAAW,EAAE,OAAO,CAAC;IAErB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAElC,SAAS,EAAE,OAAO,CAAC;IAEnB,OAAO,EAAE,OAAO,CAAC;IAEjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAKD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,mCAChB,CAAC;AAqBjC,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAqD7E"}
@@ -1,36 +1,7 @@
1
- /**
2
- * @fileoverview Hook to check if the current user is a site admin.
3
- *
4
- * Fetches user info from the backend API and caches the result using TanStack Query.
5
- * This provides a single source of truth for site admin status from the backend.
6
- */
7
1
  import { useQuery } from '@tanstack/react-query';
8
- /**
9
- * Query key for site admin queries
10
- */
11
2
  export const siteAdminQueryKey = (userId) => ['siteAdmin', userId];
12
- /**
13
- * Hook to check if the current user is a site admin.
14
- *
15
- * Fetches user info from the backend /users/:userId endpoint and caches the result.
16
- * The backend is the single source of truth for site admin status.
17
- *
18
- * @example
19
- * ```tsx
20
- * const { isSiteAdmin, isLoading } = useSiteAdmin({
21
- * networkClient,
22
- * baseUrl: 'https://api.example.com/api/v1',
23
- * userId: user?.uid,
24
- * token: idToken,
25
- * });
26
- *
27
- * if (isLoading) return <Loading />;
28
- * if (isSiteAdmin) return <AdminPanel />;
29
- * ```
30
- */
31
3
  export function useSiteAdmin(options) {
32
- const { networkClient, baseUrl, userId, token, staleTime = 5 * 60 * 1000, // 5 minutes default
33
- enabled, } = options;
4
+ const { networkClient, baseUrl, userId, token, staleTime = 5 * 60 * 1000, enabled, } = options;
34
5
  const isEnabled = enabled ?? (!!userId && !!token);
35
6
  const query = useQuery({
36
7
  queryKey: siteAdminQueryKey(userId ?? ''),
@@ -46,16 +17,13 @@ export function useSiteAdmin(options) {
46
17
  },
47
18
  });
48
19
  if (!response.ok || !response.data?.success || !response.data.data) {
49
- // User not found or not authorized - not an admin
50
20
  return null;
51
21
  }
52
22
  return response.data.data;
53
23
  },
54
24
  enabled: isEnabled,
55
25
  staleTime,
56
- // Retry once on failure (might be a transient network error)
57
26
  retry: 1,
58
- // Don't refetch on window focus for admin status
59
27
  refetchOnWindowFocus: false,
60
28
  });
61
29
  return {
@@ -67,3 +35,4 @@ export function useSiteAdmin(options) {
67
35
  refetch: query.refetch,
68
36
  };
69
37
  }
38
+ //# sourceMappingURL=useSiteAdmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSiteAdmin.js","sourceRoot":"","sources":["../../src/hooks/useSiteAdmin.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAsDjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,EAAE,CAClD,CAAC,WAAW,EAAE,MAAM,CAAU,CAAC;AAqBjC,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,EACJ,aAAa,EACb,OAAO,EACP,MAAM,EACN,KAAK,EACL,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EACzB,OAAO,GACR,GAAG,OAAO,CAAC;IAEZ,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,QAAQ,CAAC;QACrB,QAAQ,EAAE,iBAAiB,CAAC,MAAM,IAAI,EAAE,CAAC;QACzC,OAAO,EAAE,KAAK,IAAsC,EAAE;YACpD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,GAAG,GAAG,GAAG,OAAO,UAAU,MAAM,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CACtC,GAAG,EACH;gBACE,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,KAAK,EAAE;oBAChC,cAAc,EAAE,kBAAkB;iBACnC;aACF,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEnE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC;QACD,OAAO,EAAE,SAAS;QAClB,SAAS;QAET,KAAK,EAAE,CAAC;QAER,oBAAoB,EAAE,KAAK;KAC5B,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK;QAC3C,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,15 +1,8 @@
1
- /**
2
- * @fileoverview @sudobility/auth_lib - Firebase authentication utilities
3
- *
4
- * This library provides:
5
- * - Configurable Firebase Auth initialization
6
- * - Network client with automatic 401 token refresh and 403 logout handling
7
- * - Firebase error message utilities
8
- */
9
1
  export { initializeFirebaseAuth, getFirebaseApp, getFirebaseAuth, getFirebaseConfig, isFirebaseConfigured, } from './config';
10
2
  export type { FirebaseConfig, FirebaseInitOptions, FirebaseInitResult, FirebaseAuthNetworkClientOptions, } from './config';
11
3
  export { useFirebaseAuthNetworkClient } from './hooks';
12
4
  export { useSiteAdmin, siteAdminQueryKey, type UseSiteAdminOptions, type UseSiteAdminResult, type UserInfoResponse, } from './hooks';
13
5
  export { getFirebaseErrorMessage, getFirebaseErrorCode, formatFirebaseError, isFirebaseAuthError, } from './utils';
6
+ export { FirebaseAuthNetworkService, type FirebaseAuthNetworkServiceOptions, } from './network';
14
7
  export { parseAdminEmails, isAdminEmail, createAdminChecker } from './admin';
15
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,GACvC,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,17 +1,7 @@
1
- /**
2
- * @fileoverview @sudobility/auth_lib - Firebase authentication utilities
3
- *
4
- * This library provides:
5
- * - Configurable Firebase Auth initialization
6
- * - Network client with automatic 401 token refresh and 403 logout handling
7
- * - Firebase error message utilities
8
- */
9
- // Config
10
1
  export { initializeFirebaseAuth, getFirebaseApp, getFirebaseAuth, getFirebaseConfig, isFirebaseConfigured, } from './config';
11
- // Hooks
12
2
  export { useFirebaseAuthNetworkClient } from './hooks';
13
3
  export { useSiteAdmin, siteAdminQueryKey, } from './hooks';
14
- // Utils
15
4
  export { getFirebaseErrorMessage, getFirebaseErrorCode, formatFirebaseError, isFirebaseAuthError, } from './utils';
16
- // Admin
5
+ export { FirebaseAuthNetworkService, } from './network';
17
6
  export { parseAdminEmails, isAdminEmail, createAdminChecker } from './admin';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAUlB,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EACL,YAAY,EACZ,iBAAiB,GAIlB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,0BAA0B,GAE3B,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { initializeFirebaseAuth, getFirebaseApp, getFirebaseAuth, getFirebaseConfig, isFirebaseConfigured, } from './config/firebase-init.rn.js';
2
+ export type { FirebaseConfig, FirebaseInitOptions, FirebaseInitResult, FirebaseAuthNetworkClientOptions, } from './config/types.js';
3
+ export { useFirebaseAuthNetworkClient } from './hooks/index.js';
4
+ export { useSiteAdmin, siteAdminQueryKey, type UseSiteAdminOptions, type UseSiteAdminResult, type UserInfoResponse, } from './hooks/index.js';
5
+ export { getFirebaseErrorMessage, getFirebaseErrorCode, formatFirebaseError, isFirebaseAuthError, } from './utils/index.js';
6
+ export { FirebaseAuthNetworkService, type FirebaseAuthNetworkServiceOptions, } from './network/FirebaseAuthNetworkService.rn.js';
7
+ export { parseAdminEmails, isAdminEmail, createAdminChecker, } from './admin/index.js';
8
+ //# sourceMappingURL=index.rn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.rn.d.ts","sourceRoot":"","sources":["../src/index.rn.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,GACvC,MAAM,4CAA4C,CAAC;AAGpD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { initializeFirebaseAuth, getFirebaseApp, getFirebaseAuth, getFirebaseConfig, isFirebaseConfigured, } from './config/firebase-init.rn.js';
2
+ export { useFirebaseAuthNetworkClient } from './hooks/index.js';
3
+ export { useSiteAdmin, siteAdminQueryKey, } from './hooks/index.js';
4
+ export { getFirebaseErrorMessage, getFirebaseErrorCode, formatFirebaseError, isFirebaseAuthError, } from './utils/index.js';
5
+ export { FirebaseAuthNetworkService, } from './network/FirebaseAuthNetworkService.rn.js';
6
+ export { parseAdminEmails, isAdminEmail, createAdminChecker, } from './admin/index.js';
7
+ //# sourceMappingURL=index.rn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.rn.js","sourceRoot":"","sources":["../src/index.rn.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAWtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EACL,YAAY,EACZ,iBAAiB,GAIlB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,0BAA0B,GAE3B,MAAM,4CAA4C,CAAC;AAGpD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { WebNetworkService } from '@sudobility/di';
2
+ export interface FirebaseAuthNetworkServiceOptions {
3
+ onLogout?: () => void;
4
+ onTokenRefreshFailed?: (error: Error) => void;
5
+ }
6
+ export declare class FirebaseAuthNetworkService extends WebNetworkService {
7
+ private serviceOptions;
8
+ constructor(options?: FirebaseAuthNetworkServiceOptions);
9
+ request(url: string, options?: RequestInit): Promise<Response>;
10
+ }
11
+ //# sourceMappingURL=FirebaseAuthNetworkService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirebaseAuthNetworkService.d.ts","sourceRoot":"","sources":["../../src/network/FirebaseAuthNetworkService.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAInD,MAAM,WAAW,iCAAiC;IAEhD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/C;AAqCD,qBAAa,0BAA2B,SAAQ,iBAAiB;IAC/D,OAAO,CAAC,cAAc,CAAgD;gBAE1D,OAAO,CAAC,EAAE,iCAAiC;IAQxC,OAAO,CACpB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC;CAkCrB"}
@@ -0,0 +1,59 @@
1
+ import { WebNetworkService } from '@sudobility/di';
2
+ import { signOut } from 'firebase/auth';
3
+ import { getFirebaseAuth } from '../config/firebase-init';
4
+ async function getAuthToken(forceRefresh = false) {
5
+ const auth = getFirebaseAuth();
6
+ const user = auth?.currentUser;
7
+ if (!user)
8
+ return '';
9
+ try {
10
+ return await user.getIdToken(forceRefresh);
11
+ }
12
+ catch (err) {
13
+ console.error('[FirebaseAuthNetworkService] Failed to get ID token:', err);
14
+ return '';
15
+ }
16
+ }
17
+ async function logoutUser(onLogout) {
18
+ const auth = getFirebaseAuth();
19
+ if (!auth)
20
+ return;
21
+ try {
22
+ await signOut(auth);
23
+ onLogout?.();
24
+ }
25
+ catch (err) {
26
+ console.error('[FirebaseAuthNetworkService] Failed to sign out:', err);
27
+ }
28
+ }
29
+ export class FirebaseAuthNetworkService extends WebNetworkService {
30
+ constructor(options) {
31
+ super();
32
+ this.serviceOptions = options;
33
+ }
34
+ async request(url, options = {}) {
35
+ const response = await super.request(url, options);
36
+ if (response.status === 401) {
37
+ const freshToken = await getAuthToken(true);
38
+ if (freshToken) {
39
+ const retryHeaders = {
40
+ ...options.headers,
41
+ Authorization: `Bearer ${freshToken}`,
42
+ };
43
+ return super.request(url, {
44
+ ...options,
45
+ headers: retryHeaders,
46
+ });
47
+ }
48
+ else {
49
+ this.serviceOptions?.onTokenRefreshFailed?.(new Error('Failed to refresh token'));
50
+ }
51
+ }
52
+ if (response.status === 403) {
53
+ console.warn('[FirebaseAuthNetworkService] 403 Forbidden - logging user out');
54
+ await logoutUser(this.serviceOptions?.onLogout);
55
+ }
56
+ return response;
57
+ }
58
+ }
59
+ //# sourceMappingURL=FirebaseAuthNetworkService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirebaseAuthNetworkService.js","sourceRoot":"","sources":["../../src/network/FirebaseAuthNetworkService.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAa1D,KAAK,UAAU,YAAY,CAAC,YAAY,GAAG,KAAK;IAC9C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,EAAE,WAAW,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,GAAG,CAAC,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAKD,KAAK,UAAU,UAAU,CAAC,QAAqB;IAC7C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,QAAQ,EAAE,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAMD,MAAM,OAAO,0BAA2B,SAAQ,iBAAiB;IAG/D,YAAY,OAA2C;QACrD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAKQ,KAAK,CAAC,OAAO,CACpB,GAAW,EACX,UAAuB,EAAE;QAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAGnD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG;oBACnB,GAAI,OAAO,CAAC,OAAkC;oBAC9C,aAAa,EAAE,UAAU,UAAU,EAAE;iBACtC,CAAC;gBACF,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;oBACxB,GAAG,OAAO;oBACV,OAAO,EAAE,YAAY;iBACtB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBAEN,IAAI,CAAC,cAAc,EAAE,oBAAoB,EAAE,CACzC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CACrC,CAAC;YACJ,CAAC;QACH,CAAC;QAGD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CACV,+DAA+D,CAChE,CAAC;YACF,MAAM,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAElD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import { RNNetworkService } from '@sudobility/di/rn';
2
+ export interface FirebaseAuthNetworkServiceOptions {
3
+ onLogout?: () => void;
4
+ onTokenRefreshFailed?: (error: Error) => void;
5
+ }
6
+ export declare class FirebaseAuthNetworkService extends RNNetworkService {
7
+ private serviceOptions;
8
+ constructor(options?: FirebaseAuthNetworkServiceOptions);
9
+ request(url: string, options?: RequestInit): Promise<Response>;
10
+ }
11
+ //# sourceMappingURL=FirebaseAuthNetworkService.rn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirebaseAuthNetworkService.rn.d.ts","sourceRoot":"","sources":["../../src/network/FirebaseAuthNetworkService.rn.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,iCAAiC;IAEhD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/C;AAqCD,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,OAAO,CAAC,cAAc,CAAgD;gBAE1D,OAAO,CAAC,EAAE,iCAAiC;IAQxC,OAAO,CACpB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC;CAkCrB"}
@@ -0,0 +1,58 @@
1
+ import { RNNetworkService } from '@sudobility/di/rn';
2
+ import { getFirebaseAuth } from '../config/firebase-init.rn.js';
3
+ async function getAuthToken(forceRefresh = false) {
4
+ const auth = getFirebaseAuth();
5
+ const user = auth?.currentUser;
6
+ if (!user)
7
+ return '';
8
+ try {
9
+ return await user.getIdToken(forceRefresh);
10
+ }
11
+ catch (err) {
12
+ console.error('[FirebaseAuthNetworkService] Failed to get ID token:', err);
13
+ return '';
14
+ }
15
+ }
16
+ async function logoutUser(onLogout) {
17
+ const auth = getFirebaseAuth();
18
+ if (!auth)
19
+ return;
20
+ try {
21
+ await auth.signOut();
22
+ onLogout?.();
23
+ }
24
+ catch (err) {
25
+ console.error('[FirebaseAuthNetworkService] Failed to sign out:', err);
26
+ }
27
+ }
28
+ export class FirebaseAuthNetworkService extends RNNetworkService {
29
+ constructor(options) {
30
+ super();
31
+ this.serviceOptions = options;
32
+ }
33
+ async request(url, options = {}) {
34
+ const response = await super.request(url, options);
35
+ if (response.status === 401) {
36
+ const freshToken = await getAuthToken(true);
37
+ if (freshToken) {
38
+ const retryHeaders = {
39
+ ...options.headers,
40
+ Authorization: `Bearer ${freshToken}`,
41
+ };
42
+ return super.request(url, {
43
+ ...options,
44
+ headers: retryHeaders,
45
+ });
46
+ }
47
+ else {
48
+ this.serviceOptions?.onTokenRefreshFailed?.(new Error('Failed to refresh token'));
49
+ }
50
+ }
51
+ if (response.status === 403) {
52
+ console.warn('[FirebaseAuthNetworkService] 403 Forbidden - logging user out');
53
+ await logoutUser(this.serviceOptions?.onLogout);
54
+ }
55
+ return response;
56
+ }
57
+ }
58
+ //# sourceMappingURL=FirebaseAuthNetworkService.rn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirebaseAuthNetworkService.rn.js","sourceRoot":"","sources":["../../src/network/FirebaseAuthNetworkService.rn.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAahE,KAAK,UAAU,YAAY,CAAC,YAAY,GAAG,KAAK;IAC9C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,EAAE,WAAW,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,GAAG,CAAC,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAKD,KAAK,UAAU,UAAU,CAAC,QAAqB;IAC7C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,QAAQ,EAAE,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAMD,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAG9D,YAAY,OAA2C;QACrD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAKQ,KAAK,CAAC,OAAO,CACpB,GAAW,EACX,UAAuB,EAAE;QAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAGnD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG;oBACnB,GAAI,OAAO,CAAC,OAAkC;oBAC9C,aAAa,EAAE,UAAU,UAAU,EAAE;iBACtC,CAAC;gBACF,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;oBACxB,GAAG,OAAO;oBACV,OAAO,EAAE,YAAY;iBACtB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBAEN,IAAI,CAAC,cAAc,EAAE,oBAAoB,EAAE,CACzC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CACrC,CAAC;YACJ,CAAC;QACH,CAAC;QAGD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CACV,+DAA+D,CAChE,CAAC;YACF,MAAM,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAElD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { FirebaseAuthNetworkService, type FirebaseAuthNetworkServiceOptions, } from './FirebaseAuthNetworkService';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,GACvC,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { FirebaseAuthNetworkService, } from './FirebaseAuthNetworkService';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,0BAA0B,GAE3B,MAAM,8BAA8B,CAAC"}
@@ -1,32 +1,5 @@
1
- /**
2
- * @fileoverview Firebase authentication error utilities
3
- */
4
- /**
5
- * Get user-friendly error message from Firebase error code
6
- *
7
- * @param code - Firebase error code (e.g., 'auth/user-not-found')
8
- * @returns User-friendly error message
9
- */
10
1
  export declare function getFirebaseErrorMessage(code: string): string;
11
- /**
12
- * Extract error code from Firebase error
13
- *
14
- * @param error - Error object from Firebase
15
- * @returns Error code string or empty string if not found
16
- */
17
2
  export declare function getFirebaseErrorCode(error: unknown): string;
18
- /**
19
- * Get user-friendly message from Firebase error object
20
- *
21
- * @param error - Error object from Firebase
22
- * @returns User-friendly error message
23
- */
24
3
  export declare function formatFirebaseError(error: unknown): string;
25
- /**
26
- * Check if an error is a Firebase auth error
27
- *
28
- * @param error - Error object to check
29
- * @returns True if the error is a Firebase auth error
30
- */
31
4
  export declare function isFirebaseAuthError(error: unknown): boolean;
32
5
  //# sourceMappingURL=firebase-errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firebase-errors.d.ts","sourceRoot":"","sources":["../../src/utils/firebase-errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG1D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D"}
1
+ {"version":3,"file":"firebase-errors.d.ts","sourceRoot":"","sources":["../../src/utils/firebase-errors.ts"],"names":[],"mappings":"AA2BA,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI5D;AAQD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK3D;AAQD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG1D;AAQD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D"}
@@ -1,7 +1,3 @@
1
- /**
2
- * @fileoverview Firebase authentication error utilities
3
- */
4
- /** Map of Firebase auth error codes to user-friendly messages */
5
1
  const FIREBASE_ERROR_MESSAGES = {
6
2
  'auth/user-not-found': 'No account found with this email',
7
3
  'auth/wrong-password': 'Incorrect password',
@@ -16,44 +12,21 @@ const FIREBASE_ERROR_MESSAGES = {
16
12
  'auth/account-exists-with-different-credential': 'An account already exists with this email using a different sign-in method.',
17
13
  'auth/operation-not-allowed': 'This sign-in method is not enabled.',
18
14
  };
19
- /**
20
- * Get user-friendly error message from Firebase error code
21
- *
22
- * @param code - Firebase error code (e.g., 'auth/user-not-found')
23
- * @returns User-friendly error message
24
- */
25
15
  export function getFirebaseErrorMessage(code) {
26
16
  return (FIREBASE_ERROR_MESSAGES[code] ?? 'Something went wrong. Please try again.');
27
17
  }
28
- /**
29
- * Extract error code from Firebase error
30
- *
31
- * @param error - Error object from Firebase
32
- * @returns Error code string or empty string if not found
33
- */
34
18
  export function getFirebaseErrorCode(error) {
35
19
  if (error && typeof error === 'object' && 'code' in error) {
36
20
  return error.code;
37
21
  }
38
22
  return '';
39
23
  }
40
- /**
41
- * Get user-friendly message from Firebase error object
42
- *
43
- * @param error - Error object from Firebase
44
- * @returns User-friendly error message
45
- */
46
24
  export function formatFirebaseError(error) {
47
25
  const code = getFirebaseErrorCode(error);
48
26
  return getFirebaseErrorMessage(code);
49
27
  }
50
- /**
51
- * Check if an error is a Firebase auth error
52
- *
53
- * @param error - Error object to check
54
- * @returns True if the error is a Firebase auth error
55
- */
56
28
  export function isFirebaseAuthError(error) {
57
29
  const code = getFirebaseErrorCode(error);
58
30
  return code.startsWith('auth/');
59
31
  }
32
+ //# sourceMappingURL=firebase-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-errors.js","sourceRoot":"","sources":["../../src/utils/firebase-errors.ts"],"names":[],"mappings":"AAKA,MAAM,uBAAuB,GAA2B;IACtD,qBAAqB,EAAE,kCAAkC;IACzD,qBAAqB,EAAE,oBAAoB;IAC3C,oBAAoB,EAAE,uBAAuB;IAC7C,yBAAyB,EAAE,2BAA2B;IACtD,2BAA2B,EAAE,2CAA2C;IACxE,oBAAoB,EAAE,wCAAwC;IAC9D,wBAAwB,EAAE,4CAA4C;IACtE,6BAA6B,EAAE,8CAA8C;IAC7E,2BAA2B,EAAE,mBAAmB;IAChD,oBAAoB,EAAE,mDAAmD;IACzE,+CAA+C,EAC7C,6EAA6E;IAC/E,4BAA4B,EAAE,qCAAqC;CACpE,CAAC;AAQF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,CACL,uBAAuB,CAAC,IAAI,CAAC,IAAI,yCAAyC,CAC3E,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QAC1D,OAAQ,KAA0B,CAAC,IAAI,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAQD,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAQD,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -1,5 +1,2 @@
1
- /**
2
- * @fileoverview Utils exports
3
- */
4
1
  export { getFirebaseErrorMessage, getFirebaseErrorCode, formatFirebaseError, isFirebaseAuthError, } from './firebase-errors';
5
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}
@@ -1,4 +1,2 @@
1
- /**
2
- * @fileoverview Utils exports
3
- */
4
1
  export { getFirebaseErrorMessage, getFirebaseErrorCode, formatFirebaseError, isFirebaseAuthError, } from './firebase-errors';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/auth_lib",
3
- "version": "0.0.14",
3
+ "version": "0.0.18",
4
4
  "description": "Firebase authentication utilities with token refresh handling",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,6 +8,10 @@
8
8
  "types": "./dist/index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
+ "react-native": {
12
+ "import": "./dist/index.rn.js",
13
+ "types": "./dist/index.rn.d.ts"
14
+ },
11
15
  "import": "./dist/index.js",
12
16
  "types": "./dist/index.d.ts"
13
17
  }
@@ -29,15 +33,29 @@
29
33
  "prepublishOnly": "bun run build"
30
34
  },
31
35
  "peerDependencies": {
32
- "react": "^19.2.3",
36
+ "react": "^18.0.0 || ^19.0.0",
33
37
  "firebase": "^12.7.0",
34
- "@sudobility/di": "^1.5.21",
38
+ "@react-native-firebase/app": ">=18.0.0",
39
+ "@react-native-firebase/auth": ">=18.0.0",
40
+ "@sudobility/di": "^1.5.23",
35
41
  "@sudobility/types": "^1.9.48",
36
42
  "@tanstack/react-query": "^5.0.0"
37
43
  },
44
+ "peerDependenciesMeta": {
45
+ "firebase": {
46
+ "optional": true
47
+ },
48
+ "@react-native-firebase/app": {
49
+ "optional": true
50
+ },
51
+ "@react-native-firebase/auth": {
52
+ "optional": true
53
+ }
54
+ },
38
55
  "devDependencies": {
39
56
  "@sudobility/types": "^1.9.48",
40
57
  "@tanstack/react-query": "^5.80.7",
58
+ "@types/node": "^22.0.0",
41
59
  "vitest": "^4.0.4",
42
60
  "@eslint/js": "^9.0.0",
43
61
  "@types/bun": "^1.2.8",