@ponceca/firestore-sdk 0.1.0 → 1.0.0

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 (71) hide show
  1. package/dist/app.d.mts +1 -1
  2. package/dist/app.d.ts +1 -1
  3. package/dist/app.js +3 -3
  4. package/dist/app.js.map +1 -1
  5. package/dist/app.mjs +1 -1
  6. package/dist/auth/index.d.mts +17 -10
  7. package/dist/auth/index.d.ts +17 -10
  8. package/dist/auth/index.js +13 -5
  9. package/dist/auth/index.js.map +1 -1
  10. package/dist/auth/index.mjs +12 -4
  11. package/dist/chunk-4CV4JOE5.js.map +1 -1
  12. package/dist/chunk-5ETO65FT.mjs +324 -0
  13. package/dist/chunk-5ETO65FT.mjs.map +1 -0
  14. package/dist/{chunk-DXPQJR5D.mjs → chunk-6XAVSRLT.mjs} +4 -4
  15. package/dist/{chunk-MRVKMKSO.mjs → chunk-BV43NSDW.mjs} +13 -1
  16. package/dist/chunk-BV43NSDW.mjs.map +1 -0
  17. package/dist/chunk-BXV7KTHB.js.map +1 -1
  18. package/dist/{chunk-2RQUHE2K.js → chunk-DBP3RTRA.js} +6 -6
  19. package/dist/chunk-DBP3RTRA.js.map +1 -0
  20. package/dist/chunk-HCH4ADFN.js +324 -0
  21. package/dist/chunk-HCH4ADFN.js.map +1 -0
  22. package/dist/{chunk-57XXMSJA.js → chunk-JXJTWQJ4.js} +13 -1
  23. package/dist/chunk-JXJTWQJ4.js.map +1 -0
  24. package/dist/{chunk-6J3LNKUQ.js → chunk-KNNYFWIP.js} +7 -3
  25. package/dist/chunk-KNNYFWIP.js.map +1 -0
  26. package/dist/{chunk-C6SKWUQV.mjs → chunk-SZNBHCPW.mjs} +5 -1
  27. package/dist/chunk-SZNBHCPW.mjs.map +1 -0
  28. package/dist/{chunk-SZKHE2TQ.mjs → chunk-VMO4IG3Q.mjs} +3 -3
  29. package/dist/{chunk-RZWTSZSJ.js → chunk-ZNDLJ5PH.js} +23 -23
  30. package/dist/chunk-ZNDLJ5PH.js.map +1 -0
  31. package/dist/firestore/index.d.mts +2 -2
  32. package/dist/firestore/index.d.ts +2 -2
  33. package/dist/firestore/index.js +5 -5
  34. package/dist/firestore/index.js.map +1 -1
  35. package/dist/firestore/index.mjs +4 -4
  36. package/dist/http-F3DW64CJ.js +10 -0
  37. package/dist/http-F3DW64CJ.js.map +1 -0
  38. package/dist/{http-SZFONH6Z.mjs → http-IM4ZHBF6.mjs} +2 -2
  39. package/dist/index.d.mts +2 -2
  40. package/dist/index.d.ts +2 -2
  41. package/dist/index.js +15 -7
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +13 -5
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/indexeddb-mutation-queue-5EB7C2D5.js.map +1 -1
  46. package/dist/indexeddb-store-DNWBZUQE.js.map +1 -1
  47. package/dist/snapshot-MCQVLVHL.js.map +1 -1
  48. package/dist/storage/index.d.mts +138 -0
  49. package/dist/storage/index.d.ts +138 -0
  50. package/dist/storage/index.js +557 -0
  51. package/dist/storage/index.js.map +1 -0
  52. package/dist/storage/index.mjs +557 -0
  53. package/dist/storage/index.mjs.map +1 -0
  54. package/dist/{types-meoR-Ecp.d.ts → types-CxCKB06U.d.mts} +6 -4
  55. package/dist/{types-meoR-Ecp.d.mts → types-CxCKB06U.d.ts} +6 -4
  56. package/package.json +32 -5
  57. package/dist/chunk-2RQUHE2K.js.map +0 -1
  58. package/dist/chunk-57XXMSJA.js.map +0 -1
  59. package/dist/chunk-6J3LNKUQ.js.map +0 -1
  60. package/dist/chunk-C6SKWUQV.mjs.map +0 -1
  61. package/dist/chunk-MRVKMKSO.mjs.map +0 -1
  62. package/dist/chunk-RSBBZLDE.js +0 -128
  63. package/dist/chunk-RSBBZLDE.js.map +0 -1
  64. package/dist/chunk-RZWTSZSJ.js.map +0 -1
  65. package/dist/chunk-ZJ4A4Y2T.mjs +0 -128
  66. package/dist/chunk-ZJ4A4Y2T.mjs.map +0 -1
  67. package/dist/http-A2S5CWEV.js +0 -10
  68. package/dist/http-A2S5CWEV.js.map +0 -1
  69. /package/dist/{chunk-DXPQJR5D.mjs.map → chunk-6XAVSRLT.mjs.map} +0 -0
  70. /package/dist/{chunk-SZKHE2TQ.mjs.map → chunk-VMO4IG3Q.mjs.map} +0 -0
  71. /package/dist/{http-SZFONH6Z.mjs.map → http-IM4ZHBF6.mjs.map} +0 -0
package/dist/app.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { e as FirebaseApp, f as FirebaseOptions } from './types-meoR-Ecp.mjs';
1
+ import { e as FirebaseApp, f as FirebaseOptions } from './types-CxCKB06U.mjs';
2
2
 
3
3
  /**
4
4
  * Firestore SDK - App
package/dist/app.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { e as FirebaseApp, f as FirebaseOptions } from './types-meoR-Ecp.js';
1
+ import { e as FirebaseApp, f as FirebaseOptions } from './types-CxCKB06U.js';
2
2
 
3
3
  /**
4
4
  * Firestore SDK - App
package/dist/app.js CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
 
6
6
 
7
- var _chunk57XXMSJAjs = require('./chunk-57XXMSJA.js');
7
+ var _chunkJXJTWQJ4js = require('./chunk-JXJTWQJ4.js');
8
8
  require('./chunk-4CV4JOE5.js');
9
- _chunk57XXMSJAjs.init_app.call(void 0, );
9
+ _chunkJXJTWQJ4js.init_app.call(void 0, );
10
10
 
11
11
 
12
12
 
13
13
 
14
14
 
15
- exports.deleteApp = _chunk57XXMSJAjs.deleteApp; exports.getApp = _chunk57XXMSJAjs.getApp; exports.getApps = _chunk57XXMSJAjs.getApps; exports.initializeApp = _chunk57XXMSJAjs.initializeApp;
15
+ exports.deleteApp = _chunkJXJTWQJ4js.deleteApp; exports.getApp = _chunkJXJTWQJ4js.getApp; exports.getApps = _chunkJXJTWQJ4js.getApps; exports.initializeApp = _chunkJXJTWQJ4js.initializeApp;
16
16
  //# sourceMappingURL=app.js.map
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["c:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\js\\dist\\app.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,uCAAQ,CAAE;AACV;AACE;AACA;AACA;AACA;AACF,6LAAC","file":"C:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\js\\dist\\app.js"}
1
+ {"version":3,"sources":["c:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\core\\dist\\app.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,uCAAQ,CAAE;AACV;AACE;AACA;AACA;AACA;AACF,6LAAC","file":"C:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\core\\dist\\app.js"}
package/dist/app.mjs CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  getApps,
5
5
  init_app,
6
6
  initializeApp
7
- } from "./chunk-MRVKMKSO.mjs";
7
+ } from "./chunk-BV43NSDW.mjs";
8
8
  import "./chunk-NFEGQTCC.mjs";
9
9
  init_app();
10
10
  export {
@@ -1,9 +1,10 @@
1
- import { e as FirebaseApp } from '../types-meoR-Ecp.mjs';
1
+ import { e as FirebaseApp } from '../types-CxCKB06U.mjs';
2
2
 
3
3
  /**
4
- * Firebase Auth Compatibility Layer
4
+ * Firebase Auth Compatibility Layer (Production Ready)
5
5
  * Permite usar el SDK de Firestore con una API de Auth familiar.
6
6
  * Se integra automáticamente con Firestore para inyectar el token en las peticiones.
7
+ * Incluye Persistencia de Sesión y Manejo de Expiración.
7
8
  */
8
9
 
9
10
  interface User {
@@ -14,6 +15,7 @@ interface User {
14
15
  emailVerified: boolean;
15
16
  isAnonymous: boolean;
16
17
  getIdToken(forceRefresh?: boolean): Promise<string>;
18
+ toJSON(): object;
17
19
  }
18
20
  interface Auth {
19
21
  app: FirebaseApp;
@@ -21,23 +23,28 @@ interface Auth {
21
23
  signOut(): Promise<void>;
22
24
  onAuthStateChanged(observer: (user: User | null) => void): () => void;
23
25
  updateCurrentUser(user: User | null): Promise<void>;
26
+ setPersistence(persistence: Persistence): Promise<void>;
24
27
  }
28
+ interface Persistence {
29
+ type: 'LOCAL' | 'SESSION' | 'NONE';
30
+ _isAvailable(): Promise<boolean>;
31
+ _set(key: string, value: any): Promise<void>;
32
+ _get(key: string): Promise<any | null>;
33
+ _remove(key: string): Promise<void>;
34
+ }
35
+ declare const browserLocalPersistence: Persistence;
36
+ declare const browserSessionPersistence: Persistence;
37
+ declare const inMemoryPersistence: Persistence;
25
38
  /**
26
39
  * Obtiene la instancia de Auth para una app
27
40
  */
28
41
  declare function getAuth(app: FirebaseApp): Auth;
29
42
  /**
30
43
  * Inicia sesión con un token personalizado (JWT)
31
- * Útil para probar con tokens generados por tu backend o scripts.
32
44
  */
33
45
  declare function signInWithCustomToken(auth: Auth, token: string): Promise<User>;
34
- /**
35
- * Cierra la sesión
36
- */
37
46
  declare function signOut(auth: Auth): Promise<void>;
38
- /**
39
- * Suscribe a los cambios de estado de autenticación
40
- */
41
47
  declare function onAuthStateChanged(auth: Auth, observer: (user: User | null) => void): () => void;
48
+ declare function setPersistence(auth: Auth, persistence: Persistence): Promise<void>;
42
49
 
43
- export { type Auth, type User, getAuth, onAuthStateChanged, signInWithCustomToken, signOut };
50
+ export { type Auth, type Persistence, type User, browserLocalPersistence, browserSessionPersistence, getAuth, inMemoryPersistence, onAuthStateChanged, setPersistence, signInWithCustomToken, signOut };
@@ -1,9 +1,10 @@
1
- import { e as FirebaseApp } from '../types-meoR-Ecp.js';
1
+ import { e as FirebaseApp } from '../types-CxCKB06U.js';
2
2
 
3
3
  /**
4
- * Firebase Auth Compatibility Layer
4
+ * Firebase Auth Compatibility Layer (Production Ready)
5
5
  * Permite usar el SDK de Firestore con una API de Auth familiar.
6
6
  * Se integra automáticamente con Firestore para inyectar el token en las peticiones.
7
+ * Incluye Persistencia de Sesión y Manejo de Expiración.
7
8
  */
8
9
 
9
10
  interface User {
@@ -14,6 +15,7 @@ interface User {
14
15
  emailVerified: boolean;
15
16
  isAnonymous: boolean;
16
17
  getIdToken(forceRefresh?: boolean): Promise<string>;
18
+ toJSON(): object;
17
19
  }
18
20
  interface Auth {
19
21
  app: FirebaseApp;
@@ -21,23 +23,28 @@ interface Auth {
21
23
  signOut(): Promise<void>;
22
24
  onAuthStateChanged(observer: (user: User | null) => void): () => void;
23
25
  updateCurrentUser(user: User | null): Promise<void>;
26
+ setPersistence(persistence: Persistence): Promise<void>;
24
27
  }
28
+ interface Persistence {
29
+ type: 'LOCAL' | 'SESSION' | 'NONE';
30
+ _isAvailable(): Promise<boolean>;
31
+ _set(key: string, value: any): Promise<void>;
32
+ _get(key: string): Promise<any | null>;
33
+ _remove(key: string): Promise<void>;
34
+ }
35
+ declare const browserLocalPersistence: Persistence;
36
+ declare const browserSessionPersistence: Persistence;
37
+ declare const inMemoryPersistence: Persistence;
25
38
  /**
26
39
  * Obtiene la instancia de Auth para una app
27
40
  */
28
41
  declare function getAuth(app: FirebaseApp): Auth;
29
42
  /**
30
43
  * Inicia sesión con un token personalizado (JWT)
31
- * Útil para probar con tokens generados por tu backend o scripts.
32
44
  */
33
45
  declare function signInWithCustomToken(auth: Auth, token: string): Promise<User>;
34
- /**
35
- * Cierra la sesión
36
- */
37
46
  declare function signOut(auth: Auth): Promise<void>;
38
- /**
39
- * Suscribe a los cambios de estado de autenticación
40
- */
41
47
  declare function onAuthStateChanged(auth: Auth, observer: (user: User | null) => void): () => void;
48
+ declare function setPersistence(auth: Auth, persistence: Persistence): Promise<void>;
42
49
 
43
- export { type Auth, type User, getAuth, onAuthStateChanged, signInWithCustomToken, signOut };
50
+ export { type Auth, type Persistence, type User, browserLocalPersistence, browserSessionPersistence, getAuth, inMemoryPersistence, onAuthStateChanged, setPersistence, signInWithCustomToken, signOut };
@@ -3,10 +3,14 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkRSBBZLDEjs = require('../chunk-RSBBZLDE.js');
7
- require('../chunk-2RQUHE2K.js');
8
- require('../chunk-57XXMSJA.js');
9
- require('../chunk-6J3LNKUQ.js');
6
+
7
+
8
+
9
+
10
+ var _chunkHCH4ADFNjs = require('../chunk-HCH4ADFN.js');
11
+ require('../chunk-DBP3RTRA.js');
12
+ require('../chunk-JXJTWQJ4.js');
13
+ require('../chunk-KNNYFWIP.js');
10
14
  require('../chunk-BXV7KTHB.js');
11
15
  require('../chunk-4CV4JOE5.js');
12
16
 
@@ -14,5 +18,9 @@ require('../chunk-4CV4JOE5.js');
14
18
 
15
19
 
16
20
 
17
- exports.getAuth = _chunkRSBBZLDEjs.getAuth; exports.onAuthStateChanged = _chunkRSBBZLDEjs.onAuthStateChanged; exports.signInWithCustomToken = _chunkRSBBZLDEjs.signInWithCustomToken; exports.signOut = _chunkRSBBZLDEjs.signOut;
21
+
22
+
23
+
24
+
25
+ exports.browserLocalPersistence = _chunkHCH4ADFNjs.browserLocalPersistence; exports.browserSessionPersistence = _chunkHCH4ADFNjs.browserSessionPersistence; exports.getAuth = _chunkHCH4ADFNjs.getAuth; exports.inMemoryPersistence = _chunkHCH4ADFNjs.inMemoryPersistence; exports.onAuthStateChanged = _chunkHCH4ADFNjs.onAuthStateChanged; exports.setPersistence = _chunkHCH4ADFNjs.setPersistence; exports.signInWithCustomToken = _chunkHCH4ADFNjs.signInWithCustomToken; exports.signOut = _chunkHCH4ADFNjs.signOut;
18
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["c:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\js\\dist\\auth\\index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,iOAAC","file":"C:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\js\\dist\\auth\\index.js"}
1
+ {"version":3,"sources":["c:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\core\\dist\\auth\\index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,2fAAC","file":"C:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\core\\dist\\auth\\index.js"}
@@ -1,17 +1,25 @@
1
1
  import {
2
+ browserLocalPersistence,
3
+ browserSessionPersistence,
2
4
  getAuth,
5
+ inMemoryPersistence,
3
6
  onAuthStateChanged,
7
+ setPersistence,
4
8
  signInWithCustomToken,
5
9
  signOut
6
- } from "../chunk-ZJ4A4Y2T.mjs";
7
- import "../chunk-SZKHE2TQ.mjs";
8
- import "../chunk-MRVKMKSO.mjs";
9
- import "../chunk-C6SKWUQV.mjs";
10
+ } from "../chunk-5ETO65FT.mjs";
11
+ import "../chunk-VMO4IG3Q.mjs";
12
+ import "../chunk-BV43NSDW.mjs";
13
+ import "../chunk-SZNBHCPW.mjs";
10
14
  import "../chunk-C3PCJJX4.mjs";
11
15
  import "../chunk-NFEGQTCC.mjs";
12
16
  export {
17
+ browserLocalPersistence,
18
+ browserSessionPersistence,
13
19
  getAuth,
20
+ inMemoryPersistence,
14
21
  onAuthStateChanged,
22
+ setPersistence,
15
23
  signInWithCustomToken,
16
24
  signOut
17
25
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["c:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\js\\dist\\chunk-4CV4JOE5.js"],"names":[],"mappings":"AAAA,6EAAI,UAAU,EAAE,MAAM,CAAC,cAAc;AACrC,IAAI,iBAAiB,EAAE,MAAM,CAAC,wBAAwB;AACtD,IAAI,kBAAkB,EAAE,MAAM,CAAC,mBAAmB;AAClD,IAAI,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,cAAc;AAClD,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,SAAS,MAAM,CAAC,EAAE;AAC3C,EAAE,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;AACrE,CAAC;AACD,IAAI,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG;AAChC,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG;AACtB,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AACD,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;AAC9C,EAAE,GAAG,CAAC,KAAK,GAAG,OAAO,KAAK,IAAI,SAAS,GAAG,OAAO,KAAK,IAAI,UAAU,EAAE;AACtE,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAC3C,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,MAAM;AACvD,QAAQ,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1H,EAAE;AACF,EAAE,OAAO,EAAE;AACX,CAAC;AACD,IAAI,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1F;AACA;AACE;AACA;AACA;AACF,wFAAC","file":"C:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\js\\dist\\chunk-4CV4JOE5.js"}
1
+ {"version":3,"sources":["c:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\core\\dist\\chunk-4CV4JOE5.js"],"names":[],"mappings":"AAAA,6EAAI,UAAU,EAAE,MAAM,CAAC,cAAc;AACrC,IAAI,iBAAiB,EAAE,MAAM,CAAC,wBAAwB;AACtD,IAAI,kBAAkB,EAAE,MAAM,CAAC,mBAAmB;AAClD,IAAI,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,cAAc;AAClD,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,SAAS,MAAM,CAAC,EAAE;AAC3C,EAAE,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;AACrE,CAAC;AACD,IAAI,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG;AAChC,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG;AACtB,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AACD,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;AAC9C,EAAE,GAAG,CAAC,KAAK,GAAG,OAAO,KAAK,IAAI,SAAS,GAAG,OAAO,KAAK,IAAI,UAAU,EAAE;AACtE,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAC3C,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,MAAM;AACvD,QAAQ,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1H,EAAE;AACF,EAAE,OAAO,EAAE;AACX,CAAC;AACD,IAAI,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1F;AACA;AACE;AACA;AACA;AACF,wFAAC","file":"C:\\Users\\ponce\\Documents\\codigo-2026\\firestore\\sdk\\core\\dist\\chunk-4CV4JOE5.js"}
@@ -0,0 +1,324 @@
1
+ import {
2
+ _registerAuthProvider
3
+ } from "./chunk-VMO4IG3Q.mjs";
4
+
5
+ // src/auth/index.ts
6
+ var UserImpl = class _UserImpl {
7
+ constructor(uid, _token, email = null, displayName = null, photoURL = null, emailVerified = false, isAnonymous = false) {
8
+ this.uid = uid;
9
+ this._token = _token;
10
+ this.email = email;
11
+ this.displayName = displayName;
12
+ this.photoURL = photoURL;
13
+ this.emailVerified = emailVerified;
14
+ this.isAnonymous = isAnonymous;
15
+ }
16
+ async getIdToken(_forceRefresh) {
17
+ return this._token;
18
+ }
19
+ toJSON() {
20
+ return {
21
+ uid: this.uid,
22
+ email: this.email,
23
+ displayName: this.displayName,
24
+ photoURL: this.photoURL,
25
+ emailVerified: this.emailVerified,
26
+ isAnonymous: this.isAnonymous,
27
+ _token: this._token
28
+ };
29
+ }
30
+ static fromJSON(json) {
31
+ if (!json || !json.uid || !json._token) return null;
32
+ return new _UserImpl(
33
+ json.uid,
34
+ json._token,
35
+ json.email,
36
+ json.displayName,
37
+ json.photoURL,
38
+ json.emailVerified,
39
+ json.isAnonymous
40
+ );
41
+ }
42
+ };
43
+ var InMemoryPersistence = {
44
+ type: "NONE",
45
+ _isAvailable: async () => true,
46
+ _set: async () => {
47
+ },
48
+ _get: async () => null,
49
+ _remove: async () => {
50
+ }
51
+ };
52
+ var BrowserLocalPersistence = {
53
+ type: "LOCAL",
54
+ _isAvailable: async () => typeof window !== "undefined" && !!window.localStorage,
55
+ _set: async (key, value) => {
56
+ try {
57
+ window.localStorage.setItem(key, JSON.stringify(value));
58
+ } catch {
59
+ }
60
+ },
61
+ _get: async (key) => {
62
+ try {
63
+ const json = window.localStorage.getItem(key);
64
+ return json ? JSON.parse(json) : null;
65
+ } catch {
66
+ return null;
67
+ }
68
+ },
69
+ _remove: async (key) => {
70
+ try {
71
+ window.localStorage.removeItem(key);
72
+ } catch {
73
+ }
74
+ }
75
+ };
76
+ var BrowserSessionPersistence = {
77
+ type: "SESSION",
78
+ _isAvailable: async () => typeof window !== "undefined" && !!window.sessionStorage,
79
+ _set: async (key, value) => {
80
+ try {
81
+ window.sessionStorage.setItem(key, JSON.stringify(value));
82
+ } catch {
83
+ }
84
+ },
85
+ _get: async (key) => {
86
+ try {
87
+ const json = window.sessionStorage.getItem(key);
88
+ return json ? JSON.parse(json) : null;
89
+ } catch {
90
+ return null;
91
+ }
92
+ },
93
+ _remove: async (key) => {
94
+ try {
95
+ window.sessionStorage.removeItem(key);
96
+ } catch {
97
+ }
98
+ }
99
+ };
100
+ var browserLocalPersistence = BrowserLocalPersistence;
101
+ var browserSessionPersistence = BrowserSessionPersistence;
102
+ var inMemoryPersistence = InMemoryPersistence;
103
+ var AuthImpl = class {
104
+ constructor(app) {
105
+ this.app = app;
106
+ this.currentUser = null;
107
+ this.observers = [];
108
+ this.persistence = BrowserLocalPersistence;
109
+ this._storageListener = null;
110
+ this.persistenceKey = `firebase:authUser:${app.options.apiKey}:${app.name}`;
111
+ this._initializationPromise = this._initialize();
112
+ this._setupMultiTabSynchronization();
113
+ _registerAuthProvider(app, {
114
+ getToken: async () => {
115
+ await this._initializationPromise;
116
+ if (!this.currentUser) return null;
117
+ const token = await this.currentUser.getIdToken();
118
+ if (isTokenExpired(token)) {
119
+ await this.signOut();
120
+ return null;
121
+ }
122
+ return token;
123
+ },
124
+ onAuthStateChanged: (callback) => {
125
+ const observer = async (user) => {
126
+ if (user) {
127
+ try {
128
+ const token = await user.getIdToken();
129
+ if (isTokenExpired(token)) {
130
+ await this.signOut();
131
+ callback(null);
132
+ } else {
133
+ callback(token);
134
+ }
135
+ } catch {
136
+ callback(null);
137
+ }
138
+ } else {
139
+ callback(null);
140
+ }
141
+ };
142
+ this._initializationPromise.then(() => {
143
+ this.onAuthStateChanged(observer);
144
+ });
145
+ return () => {
146
+ this.observers = this.observers.filter((o) => o !== observer);
147
+ };
148
+ }
149
+ });
150
+ }
151
+ async _initialize() {
152
+ try {
153
+ if (await this.persistence._isAvailable()) {
154
+ const savedUser = await this.persistence._get(this.persistenceKey);
155
+ if (savedUser) {
156
+ const user = UserImpl.fromJSON(savedUser);
157
+ if (user) {
158
+ const token = await user.getIdToken();
159
+ if (!isTokenExpired(token)) {
160
+ this.currentUser = user;
161
+ } else {
162
+ await this.persistence._remove(this.persistenceKey);
163
+ }
164
+ }
165
+ }
166
+ }
167
+ } catch (e) {
168
+ console.warn("Auth: Error restoring session", e);
169
+ }
170
+ }
171
+ // Sincronización entre pestañas del navegador
172
+ _setupMultiTabSynchronization() {
173
+ if (typeof window !== "undefined" && window.addEventListener) {
174
+ this._storageListener = (event) => {
175
+ if (event.key === this.persistenceKey) {
176
+ if (!event.newValue) {
177
+ this.currentUser = null;
178
+ this.notifyObservers();
179
+ return;
180
+ }
181
+ try {
182
+ const json = JSON.parse(event.newValue);
183
+ const user = UserImpl.fromJSON(json);
184
+ if (user && (!this.currentUser || this.currentUser.uid !== user.uid || user._token !== this.currentUser._token)) {
185
+ this.currentUser = user;
186
+ this.notifyObservers();
187
+ }
188
+ } catch {
189
+ }
190
+ }
191
+ };
192
+ window.addEventListener("storage", this._storageListener);
193
+ }
194
+ }
195
+ async setPersistence(persistence) {
196
+ if (this.currentUser) {
197
+ await this.persistence._remove(this.persistenceKey);
198
+ await persistence._set(this.persistenceKey, this.currentUser.toJSON());
199
+ }
200
+ this.persistence = persistence;
201
+ }
202
+ async signOut() {
203
+ await this._initializationPromise;
204
+ if (this.currentUser) {
205
+ this.currentUser = null;
206
+ await this.persistence._remove(this.persistenceKey);
207
+ this.notifyObservers();
208
+ }
209
+ }
210
+ onAuthStateChanged(observer) {
211
+ this.observers.push(observer);
212
+ this._initializationPromise.then(() => {
213
+ observer(this.currentUser);
214
+ });
215
+ return () => {
216
+ this.observers = this.observers.filter((o) => o !== observer);
217
+ };
218
+ }
219
+ async updateCurrentUser(user) {
220
+ await this._initializationPromise;
221
+ if (this.currentUser === user) return;
222
+ if (user && this.currentUser && user.uid === this.currentUser.uid && user._token === this.currentUser._token) return;
223
+ this.currentUser = user;
224
+ try {
225
+ if (user) {
226
+ await this.persistence._set(this.persistenceKey, user.toJSON());
227
+ } else {
228
+ await this.persistence._remove(this.persistenceKey);
229
+ }
230
+ } catch (e) {
231
+ console.warn("Auth: Failed to persist session", e);
232
+ }
233
+ this.notifyObservers();
234
+ }
235
+ notifyObservers() {
236
+ this.observers.forEach((observer) => observer(this.currentUser));
237
+ }
238
+ };
239
+ var authInstances = /* @__PURE__ */ new Map();
240
+ function getAuth(app) {
241
+ let auth = authInstances.get(app.name);
242
+ if (!auth) {
243
+ auth = new AuthImpl(app);
244
+ authInstances.set(app.name, auth);
245
+ }
246
+ return auth;
247
+ }
248
+ async function signInWithCustomToken(auth, token) {
249
+ const parts = token.split(".");
250
+ if (parts.length !== 3) {
251
+ throw new Error("Invalid custom token format");
252
+ }
253
+ try {
254
+ const payload = JSON.parse(atob(parts[1]));
255
+ const uid = payload.sub || payload.user_id;
256
+ if (!uid || typeof uid !== "string") {
257
+ throw new Error('Token must contain a valid "sub" or "user_id" claim');
258
+ }
259
+ const exp = payload.exp;
260
+ if (typeof exp !== "number") {
261
+ throw new Error('Token must contain a valid "exp" claim');
262
+ }
263
+ if (Date.now() >= exp * 1e3) {
264
+ throw new Error("Token has expired");
265
+ }
266
+ const user = new UserImpl(
267
+ uid,
268
+ token,
269
+ payload.email || null,
270
+ payload.name || null,
271
+ payload.picture || null,
272
+ payload.emailVerified || payload.email_verified || false,
273
+ payload.provider_id === "anonymous"
274
+ );
275
+ await auth.updateCurrentUser(user);
276
+ return user;
277
+ } catch (e) {
278
+ throw new Error("Failed to parse custom token: " + e);
279
+ }
280
+ }
281
+ async function signOut(auth) {
282
+ return auth.signOut();
283
+ }
284
+ function onAuthStateChanged(auth, observer) {
285
+ return auth.onAuthStateChanged(observer);
286
+ }
287
+ async function setPersistence(auth, persistence) {
288
+ return auth.setPersistence(persistence);
289
+ }
290
+ function atob(str) {
291
+ str = str.replace(/-/g, "+").replace(/_/g, "/");
292
+ while (str.length % 4) {
293
+ str += "=";
294
+ }
295
+ if (typeof window !== "undefined" && window.atob) {
296
+ return window.atob(str);
297
+ } else {
298
+ return Buffer.from(str, "base64").toString("binary");
299
+ }
300
+ }
301
+ function isTokenExpired(token) {
302
+ try {
303
+ const parts = token.split(".");
304
+ if (parts.length !== 3) return true;
305
+ const payload = JSON.parse(atob(parts[1]));
306
+ const exp = payload.exp;
307
+ if (!exp) return true;
308
+ return Date.now() >= exp * 1e3 - 1e4;
309
+ } catch {
310
+ return true;
311
+ }
312
+ }
313
+
314
+ export {
315
+ browserLocalPersistence,
316
+ browserSessionPersistence,
317
+ inMemoryPersistence,
318
+ getAuth,
319
+ signInWithCustomToken,
320
+ signOut,
321
+ onAuthStateChanged,
322
+ setPersistence
323
+ };
324
+ //# sourceMappingURL=chunk-5ETO65FT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/index.ts"],"sourcesContent":["/**\r\n * Firebase Auth Compatibility Layer (Production Ready)\r\n * Permite usar el SDK de Firestore con una API de Auth familiar.\r\n * Se integra automáticamente con Firestore para inyectar el token en las peticiones.\r\n * Incluye Persistencia de Sesión y Manejo de Expiración.\r\n */\r\n\r\nimport { FirebaseApp } from '../app';\r\nimport { _registerAuthProvider } from '../firestore/firestore';\r\n\r\n// Tipos de usuario y auth\r\nexport interface User {\r\n uid: string;\r\n email: string | null;\r\n displayName: string | null;\r\n photoURL: string | null;\r\n emailVerified: boolean;\r\n isAnonymous: boolean;\r\n getIdToken(forceRefresh?: boolean): Promise<string>;\r\n toJSON(): object;\r\n}\r\n\r\nexport interface Auth {\r\n app: FirebaseApp;\r\n currentUser: User | null;\r\n signOut(): Promise<void>;\r\n onAuthStateChanged(observer: (user: User | null) => void): () => void;\r\n updateCurrentUser(user: User | null): Promise<void>;\r\n setPersistence(persistence: Persistence): Promise<void>;\r\n}\r\n\r\n// Interfaz de Persistencia\r\nexport interface Persistence {\r\n type: 'LOCAL' | 'SESSION' | 'NONE';\r\n _isAvailable(): Promise<boolean>;\r\n _set(key: string, value: any): Promise<void>;\r\n _get(key: string): Promise<any | null>;\r\n _remove(key: string): Promise<void>;\r\n}\r\n\r\n/**\r\n * Implementación interna de User\r\n */\r\nclass UserImpl implements User {\r\n constructor(\r\n readonly uid: string,\r\n private _token: string,\r\n readonly email: string | null = null,\r\n readonly displayName: string | null = null,\r\n readonly photoURL: string | null = null,\r\n readonly emailVerified: boolean = false,\r\n readonly isAnonymous: boolean = false\r\n ) { }\r\n\r\n async getIdToken(_forceRefresh?: boolean): Promise<string> {\r\n return this._token; // En esta implementación simple, retornamos el token estático\r\n }\r\n\r\n toJSON(): object {\r\n return {\r\n uid: this.uid,\r\n email: this.email,\r\n displayName: this.displayName,\r\n photoURL: this.photoURL,\r\n emailVerified: this.emailVerified,\r\n isAnonymous: this.isAnonymous,\r\n _token: this._token\r\n };\r\n }\r\n\r\n static fromJSON(json: any): UserImpl | null {\r\n if (!json || !json.uid || !json._token) return null;\r\n return new UserImpl(\r\n json.uid,\r\n json._token,\r\n json.email,\r\n json.displayName,\r\n json.photoURL,\r\n json.emailVerified,\r\n json.isAnonymous\r\n );\r\n }\r\n}\r\n\r\n// Implementaciones de Persistencia\r\nconst InMemoryPersistence: Persistence = {\r\n type: 'NONE',\r\n _isAvailable: async () => true,\r\n _set: async () => { },\r\n _get: async () => null,\r\n _remove: async () => { }\r\n};\r\n\r\nconst BrowserLocalPersistence: Persistence = {\r\n type: 'LOCAL',\r\n _isAvailable: async () => typeof window !== 'undefined' && !!window.localStorage,\r\n _set: async (key, value) => {\r\n try { window.localStorage.setItem(key, JSON.stringify(value)); } catch { }\r\n },\r\n _get: async (key) => {\r\n try {\r\n const json = window.localStorage.getItem(key);\r\n return json ? JSON.parse(json) : null;\r\n } catch { return null; }\r\n },\r\n _remove: async (key) => {\r\n try { window.localStorage.removeItem(key); } catch { }\r\n }\r\n};\r\n\r\nconst BrowserSessionPersistence: Persistence = {\r\n type: 'SESSION',\r\n _isAvailable: async () => typeof window !== 'undefined' && !!window.sessionStorage,\r\n _set: async (key, value) => {\r\n try { window.sessionStorage.setItem(key, JSON.stringify(value)); } catch { }\r\n },\r\n _get: async (key) => {\r\n try {\r\n const json = window.sessionStorage.getItem(key);\r\n return json ? JSON.parse(json) : null;\r\n } catch { return null; }\r\n },\r\n _remove: async (key) => {\r\n try { window.sessionStorage.removeItem(key); } catch { }\r\n }\r\n};\r\n\r\nexport const browserLocalPersistence = BrowserLocalPersistence;\r\nexport const browserSessionPersistence = BrowserSessionPersistence;\r\nexport const inMemoryPersistence = InMemoryPersistence;\r\n\r\n/**\r\n * Implementación interna de Auth (Enterprise Grade)\r\n * - Sincronización Multi-Tab\r\n * - Persistencia Robusta\r\n * - Manejo de Fallos de Storage\r\n */\r\nclass AuthImpl implements Auth {\r\n currentUser: User | null = null;\r\n private observers: ((user: User | null) => void)[] = [];\r\n private persistence: Persistence = BrowserLocalPersistence;\r\n private persistenceKey: string;\r\n private _initializationPromise: Promise<void>;\r\n private _storageListener: ((e: StorageEvent) => void) | null = null;\r\n\r\n constructor(readonly app: FirebaseApp) {\r\n this.persistenceKey = `firebase:authUser:${app.options.apiKey}:${app.name}`;\r\n\r\n // Inicialización asíncrona (restaurar sesión)\r\n this._initializationPromise = this._initialize();\r\n\r\n // Configurar escucha de eventos de otras pestañas (Enterprise Feature)\r\n this._setupMultiTabSynchronization();\r\n\r\n // Registrar este auth provider en Firestore\r\n _registerAuthProvider(app, {\r\n getToken: async (): Promise<string | null> => {\r\n await this._initializationPromise;\r\n if (!this.currentUser) return null;\r\n\r\n // Verificar expiración antes de devolver\r\n const token = await this.currentUser.getIdToken();\r\n if (isTokenExpired(token)) {\r\n await this.signOut();\r\n return null;\r\n }\r\n return token;\r\n },\r\n onAuthStateChanged: (callback: (token: string | null) => void) => {\r\n const observer = async (user: User | null) => {\r\n if (user) {\r\n try {\r\n const token = await user.getIdToken();\r\n if (isTokenExpired(token)) {\r\n await this.signOut();\r\n callback(null);\r\n } else {\r\n callback(token);\r\n }\r\n } catch {\r\n callback(null);\r\n }\r\n } else {\r\n callback(null);\r\n }\r\n };\r\n\r\n // Esperar inicialización antes de suscribir\r\n this._initializationPromise.then(() => {\r\n this.onAuthStateChanged(observer);\r\n });\r\n\r\n return () => {\r\n this.observers = this.observers.filter((o) => o !== observer);\r\n };\r\n }\r\n });\r\n }\r\n\r\n private async _initialize() {\r\n try {\r\n if (await this.persistence._isAvailable()) {\r\n const savedUser = await this.persistence._get(this.persistenceKey);\r\n if (savedUser) {\r\n const user = UserImpl.fromJSON(savedUser);\r\n if (user) {\r\n // Validar expiración al cargar\r\n const token = await user.getIdToken();\r\n if (!isTokenExpired(token)) {\r\n this.currentUser = user;\r\n } else {\r\n // Limpiar si expiró\r\n await this.persistence._remove(this.persistenceKey);\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.warn('Auth: Error restoring session', e);\r\n // Fallback silencioso a estado deslogueado\r\n }\r\n }\r\n\r\n // Sincronización entre pestañas del navegador\r\n private _setupMultiTabSynchronization() {\r\n if (typeof window !== 'undefined' && window.addEventListener) {\r\n this._storageListener = (event: StorageEvent) => {\r\n if (event.key === this.persistenceKey) {\r\n // Si el valor cambió a null, es un logout remoto\r\n if (!event.newValue) {\r\n this.currentUser = null;\r\n this.notifyObservers();\r\n return;\r\n }\r\n\r\n // Si el valor cambió a algo, es un login/refresh remoto\r\n try {\r\n const json = JSON.parse(event.newValue);\r\n const user = UserImpl.fromJSON(json);\r\n if (user && (!this.currentUser || this.currentUser.uid !== user.uid || (user as any)._token !== (this.currentUser as any)._token)) {\r\n this.currentUser = user;\r\n this.notifyObservers();\r\n }\r\n } catch {\r\n // Ignorar datos corruptos de otra pestaña\r\n }\r\n }\r\n };\r\n window.addEventListener('storage', this._storageListener);\r\n }\r\n }\r\n\r\n async setPersistence(persistence: Persistence): Promise<void> {\r\n // Mover datos si ya hay usuario\r\n if (this.currentUser) {\r\n await this.persistence._remove(this.persistenceKey);\r\n await persistence._set(this.persistenceKey, this.currentUser.toJSON());\r\n }\r\n this.persistence = persistence;\r\n }\r\n\r\n async signOut(): Promise<void> {\r\n await this._initializationPromise;\r\n // Solo actuar si hay usuario (para evitar loops infinitos de eventos storage)\r\n if (this.currentUser) {\r\n this.currentUser = null;\r\n await this.persistence._remove(this.persistenceKey);\r\n this.notifyObservers();\r\n }\r\n }\r\n\r\n onAuthStateChanged(observer: (user: User | null) => void): () => void {\r\n this.observers.push(observer);\r\n\r\n // Si ya terminamos de inicializar, notificar estado actual\r\n // Si no, esperar a que termine _initialize\r\n this._initializationPromise.then(() => {\r\n observer(this.currentUser);\r\n });\r\n\r\n return () => {\r\n this.observers = this.observers.filter((o) => o !== observer);\r\n };\r\n }\r\n\r\n async updateCurrentUser(user: User | null): Promise<void> {\r\n await this._initializationPromise;\r\n\r\n // Optimización: Si es el mismo usuario y mismo token, no hacer nada\r\n if (this.currentUser === user) return;\r\n if (user && this.currentUser && user.uid === this.currentUser.uid && (user as any)._token === (this.currentUser as any)._token) return;\r\n\r\n this.currentUser = user;\r\n\r\n // Persistir cambio\r\n try {\r\n if (user) {\r\n await this.persistence._set(this.persistenceKey, user.toJSON());\r\n } else {\r\n await this.persistence._remove(this.persistenceKey);\r\n }\r\n } catch (e) {\r\n console.warn('Auth: Failed to persist session', e);\r\n }\r\n\r\n this.notifyObservers();\r\n }\r\n\r\n private notifyObservers(): void {\r\n this.observers.forEach((observer) => observer(this.currentUser));\r\n }\r\n}\r\n\r\n// Almacén de instancias Auth\r\nconst authInstances = new Map<string, AuthImpl>();\r\n\r\n/**\r\n * Obtiene la instancia de Auth para una app\r\n */\r\nexport function getAuth(app: FirebaseApp): Auth {\r\n let auth = authInstances.get(app.name);\r\n if (!auth) {\r\n auth = new AuthImpl(app);\r\n authInstances.set(app.name, auth);\r\n }\r\n return auth;\r\n}\r\n\r\n/**\r\n * Inicia sesión con un token personalizado (JWT)\r\n */\r\nexport async function signInWithCustomToken(auth: Auth, token: string): Promise<User> {\r\n const parts = token.split('.');\r\n if (parts.length !== 3) {\r\n throw new Error('Invalid custom token format');\r\n }\r\n\r\n try {\r\n const payload = JSON.parse(atob(parts[1]));\r\n\r\n const uid = payload.sub || payload.user_id;\r\n if (!uid || typeof uid !== 'string') {\r\n throw new Error('Token must contain a valid \"sub\" or \"user_id\" claim');\r\n }\r\n\r\n // Extraer expiración y validar\r\n const exp = payload.exp;\r\n if (typeof exp !== 'number') {\r\n throw new Error('Token must contain a valid \"exp\" claim');\r\n }\r\n\r\n // Chequeo preventivo de expiración\r\n if (Date.now() >= exp * 1000) {\r\n throw new Error('Token has expired');\r\n }\r\n\r\n const user = new UserImpl(\r\n uid,\r\n token,\r\n payload.email || null,\r\n payload.name || null,\r\n payload.picture || null,\r\n payload.emailVerified || payload.email_verified || false,\r\n payload.provider_id === 'anonymous'\r\n );\r\n\r\n await auth.updateCurrentUser(user);\r\n return user;\r\n } catch (e) {\r\n throw new Error('Failed to parse custom token: ' + e);\r\n }\r\n}\r\n\r\nexport async function signOut(auth: Auth): Promise<void> {\r\n return auth.signOut();\r\n}\r\n\r\nexport function onAuthStateChanged(auth: Auth, observer: (user: User | null) => void): () => void {\r\n return auth.onAuthStateChanged(observer);\r\n}\r\n\r\nexport async function setPersistence(auth: Auth, persistence: Persistence): Promise<void> {\r\n return auth.setPersistence(persistence);\r\n}\r\n\r\n\r\n// --- Helpers ---\r\n\r\nfunction atob(str: string): string {\r\n str = str.replace(/-/g, '+').replace(/_/g, '/');\r\n while (str.length % 4) {\r\n str += '=';\r\n }\r\n if (typeof window !== 'undefined' && window.atob) {\r\n return window.atob(str);\r\n } else {\r\n return Buffer.from(str, 'base64').toString('binary');\r\n }\r\n}\r\n\r\nfunction isTokenExpired(token: string): boolean {\r\n try {\r\n const parts = token.split('.');\r\n if (parts.length !== 3) return true;\r\n const payload = JSON.parse(atob(parts[1]));\r\n const exp = payload.exp;\r\n if (!exp) return true;\r\n // Margen de 10 segundos para reloj desfasado\r\n return Date.now() >= (exp * 1000) - 10000;\r\n } catch {\r\n return true;\r\n }\r\n}\r\n"],"mappings":";;;;;AA2CA,IAAM,WAAN,MAAM,UAAyB;AAAA,EAC3B,YACa,KACD,QACC,QAAuB,MACvB,cAA6B,MAC7B,WAA0B,MAC1B,gBAAyB,OACzB,cAAuB,OAClC;AAPW;AACD;AACC;AACA;AACA;AACA;AACA;AAAA,EACT;AAAA,EAEJ,MAAM,WAAW,eAA0C;AACvD,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,SAAiB;AACb,WAAO;AAAA,MACH,KAAK,KAAK;AAAA,MACV,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,MACpB,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,SAAS,MAA4B;AACxC,QAAI,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,KAAK,OAAQ,QAAO;AAC/C,WAAO,IAAI;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACT;AAAA,EACJ;AACJ;AAGA,IAAM,sBAAmC;AAAA,EACrC,MAAM;AAAA,EACN,cAAc,YAAY;AAAA,EAC1B,MAAM,YAAY;AAAA,EAAE;AAAA,EACpB,MAAM,YAAY;AAAA,EAClB,SAAS,YAAY;AAAA,EAAE;AAC3B;AAEA,IAAM,0BAAuC;AAAA,EACzC,MAAM;AAAA,EACN,cAAc,YAAY,OAAO,WAAW,eAAe,CAAC,CAAC,OAAO;AAAA,EACpE,MAAM,OAAO,KAAK,UAAU;AACxB,QAAI;AAAE,aAAO,aAAa,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IAAG,QAAQ;AAAA,IAAE;AAAA,EAC7E;AAAA,EACA,MAAM,OAAO,QAAQ;AACjB,QAAI;AACA,YAAM,OAAO,OAAO,aAAa,QAAQ,GAAG;AAC5C,aAAO,OAAO,KAAK,MAAM,IAAI,IAAI;AAAA,IACrC,QAAQ;AAAE,aAAO;AAAA,IAAM;AAAA,EAC3B;AAAA,EACA,SAAS,OAAO,QAAQ;AACpB,QAAI;AAAE,aAAO,aAAa,WAAW,GAAG;AAAA,IAAG,QAAQ;AAAA,IAAE;AAAA,EACzD;AACJ;AAEA,IAAM,4BAAyC;AAAA,EAC3C,MAAM;AAAA,EACN,cAAc,YAAY,OAAO,WAAW,eAAe,CAAC,CAAC,OAAO;AAAA,EACpE,MAAM,OAAO,KAAK,UAAU;AACxB,QAAI;AAAE,aAAO,eAAe,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IAAG,QAAQ;AAAA,IAAE;AAAA,EAC/E;AAAA,EACA,MAAM,OAAO,QAAQ;AACjB,QAAI;AACA,YAAM,OAAO,OAAO,eAAe,QAAQ,GAAG;AAC9C,aAAO,OAAO,KAAK,MAAM,IAAI,IAAI;AAAA,IACrC,QAAQ;AAAE,aAAO;AAAA,IAAM;AAAA,EAC3B;AAAA,EACA,SAAS,OAAO,QAAQ;AACpB,QAAI;AAAE,aAAO,eAAe,WAAW,GAAG;AAAA,IAAG,QAAQ;AAAA,IAAE;AAAA,EAC3D;AACJ;AAEO,IAAM,0BAA0B;AAChC,IAAM,4BAA4B;AAClC,IAAM,sBAAsB;AAQnC,IAAM,WAAN,MAA+B;AAAA,EAQ3B,YAAqB,KAAkB;AAAlB;AAPrB,uBAA2B;AAC3B,SAAQ,YAA6C,CAAC;AACtD,SAAQ,cAA2B;AAGnC,SAAQ,mBAAuD;AAG3D,SAAK,iBAAiB,qBAAqB,IAAI,QAAQ,MAAM,IAAI,IAAI,IAAI;AAGzE,SAAK,yBAAyB,KAAK,YAAY;AAG/C,SAAK,8BAA8B;AAGnC,0BAAsB,KAAK;AAAA,MACvB,UAAU,YAAoC;AAC1C,cAAM,KAAK;AACX,YAAI,CAAC,KAAK,YAAa,QAAO;AAG9B,cAAM,QAAQ,MAAM,KAAK,YAAY,WAAW;AAChD,YAAI,eAAe,KAAK,GAAG;AACvB,gBAAM,KAAK,QAAQ;AACnB,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA,MACA,oBAAoB,CAAC,aAA6C;AAC9D,cAAM,WAAW,OAAO,SAAsB;AAC1C,cAAI,MAAM;AACN,gBAAI;AACA,oBAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,kBAAI,eAAe,KAAK,GAAG;AACvB,sBAAM,KAAK,QAAQ;AACnB,yBAAS,IAAI;AAAA,cACjB,OAAO;AACH,yBAAS,KAAK;AAAA,cAClB;AAAA,YACJ,QAAQ;AACJ,uBAAS,IAAI;AAAA,YACjB;AAAA,UACJ,OAAO;AACH,qBAAS,IAAI;AAAA,UACjB;AAAA,QACJ;AAGA,aAAK,uBAAuB,KAAK,MAAM;AACnC,eAAK,mBAAmB,QAAQ;AAAA,QACpC,CAAC;AAED,eAAO,MAAM;AACT,eAAK,YAAY,KAAK,UAAU,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,QAChE;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAc,cAAc;AACxB,QAAI;AACA,UAAI,MAAM,KAAK,YAAY,aAAa,GAAG;AACvC,cAAM,YAAY,MAAM,KAAK,YAAY,KAAK,KAAK,cAAc;AACjE,YAAI,WAAW;AACX,gBAAM,OAAO,SAAS,SAAS,SAAS;AACxC,cAAI,MAAM;AAEN,kBAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,gBAAI,CAAC,eAAe,KAAK,GAAG;AACxB,mBAAK,cAAc;AAAA,YACvB,OAAO;AAEH,oBAAM,KAAK,YAAY,QAAQ,KAAK,cAAc;AAAA,YACtD;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,SAAS,GAAG;AACR,cAAQ,KAAK,iCAAiC,CAAC;AAAA,IAEnD;AAAA,EACJ;AAAA;AAAA,EAGQ,gCAAgC;AACpC,QAAI,OAAO,WAAW,eAAe,OAAO,kBAAkB;AAC1D,WAAK,mBAAmB,CAAC,UAAwB;AAC7C,YAAI,MAAM,QAAQ,KAAK,gBAAgB;AAEnC,cAAI,CAAC,MAAM,UAAU;AACjB,iBAAK,cAAc;AACnB,iBAAK,gBAAgB;AACrB;AAAA,UACJ;AAGA,cAAI;AACA,kBAAM,OAAO,KAAK,MAAM,MAAM,QAAQ;AACtC,kBAAM,OAAO,SAAS,SAAS,IAAI;AACnC,gBAAI,SAAS,CAAC,KAAK,eAAe,KAAK,YAAY,QAAQ,KAAK,OAAQ,KAAa,WAAY,KAAK,YAAoB,SAAS;AAC/H,mBAAK,cAAc;AACnB,mBAAK,gBAAgB;AAAA,YACzB;AAAA,UACJ,QAAQ;AAAA,UAER;AAAA,QACJ;AAAA,MACJ;AACA,aAAO,iBAAiB,WAAW,KAAK,gBAAgB;AAAA,IAC5D;AAAA,EACJ;AAAA,EAEA,MAAM,eAAe,aAAyC;AAE1D,QAAI,KAAK,aAAa;AAClB,YAAM,KAAK,YAAY,QAAQ,KAAK,cAAc;AAClD,YAAM,YAAY,KAAK,KAAK,gBAAgB,KAAK,YAAY,OAAO,CAAC;AAAA,IACzE;AACA,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,MAAM,UAAyB;AAC3B,UAAM,KAAK;AAEX,QAAI,KAAK,aAAa;AAClB,WAAK,cAAc;AACnB,YAAM,KAAK,YAAY,QAAQ,KAAK,cAAc;AAClD,WAAK,gBAAgB;AAAA,IACzB;AAAA,EACJ;AAAA,EAEA,mBAAmB,UAAmD;AAClE,SAAK,UAAU,KAAK,QAAQ;AAI5B,SAAK,uBAAuB,KAAK,MAAM;AACnC,eAAS,KAAK,WAAW;AAAA,IAC7B,CAAC;AAED,WAAO,MAAM;AACT,WAAK,YAAY,KAAK,UAAU,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,IAChE;AAAA,EACJ;AAAA,EAEA,MAAM,kBAAkB,MAAkC;AACtD,UAAM,KAAK;AAGX,QAAI,KAAK,gBAAgB,KAAM;AAC/B,QAAI,QAAQ,KAAK,eAAe,KAAK,QAAQ,KAAK,YAAY,OAAQ,KAAa,WAAY,KAAK,YAAoB,OAAQ;AAEhI,SAAK,cAAc;AAGnB,QAAI;AACA,UAAI,MAAM;AACN,cAAM,KAAK,YAAY,KAAK,KAAK,gBAAgB,KAAK,OAAO,CAAC;AAAA,MAClE,OAAO;AACH,cAAM,KAAK,YAAY,QAAQ,KAAK,cAAc;AAAA,MACtD;AAAA,IACJ,SAAS,GAAG;AACR,cAAQ,KAAK,mCAAmC,CAAC;AAAA,IACrD;AAEA,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEQ,kBAAwB;AAC5B,SAAK,UAAU,QAAQ,CAAC,aAAa,SAAS,KAAK,WAAW,CAAC;AAAA,EACnE;AACJ;AAGA,IAAM,gBAAgB,oBAAI,IAAsB;AAKzC,SAAS,QAAQ,KAAwB;AAC5C,MAAI,OAAO,cAAc,IAAI,IAAI,IAAI;AACrC,MAAI,CAAC,MAAM;AACP,WAAO,IAAI,SAAS,GAAG;AACvB,kBAAc,IAAI,IAAI,MAAM,IAAI;AAAA,EACpC;AACA,SAAO;AACX;AAKA,eAAsB,sBAAsB,MAAY,OAA8B;AAClF,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,WAAW,GAAG;AACpB,UAAM,IAAI,MAAM,6BAA6B;AAAA,EACjD;AAEA,MAAI;AACA,UAAM,UAAU,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;AAEzC,UAAM,MAAM,QAAQ,OAAO,QAAQ;AACnC,QAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACjC,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACzE;AAGA,UAAM,MAAM,QAAQ;AACpB,QAAI,OAAO,QAAQ,UAAU;AACzB,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC5D;AAGA,QAAI,KAAK,IAAI,KAAK,MAAM,KAAM;AAC1B,YAAM,IAAI,MAAM,mBAAmB;AAAA,IACvC;AAEA,UAAM,OAAO,IAAI;AAAA,MACb;AAAA,MACA;AAAA,MACA,QAAQ,SAAS;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,WAAW;AAAA,MACnB,QAAQ,iBAAiB,QAAQ,kBAAkB;AAAA,MACnD,QAAQ,gBAAgB;AAAA,IAC5B;AAEA,UAAM,KAAK,kBAAkB,IAAI;AACjC,WAAO;AAAA,EACX,SAAS,GAAG;AACR,UAAM,IAAI,MAAM,mCAAmC,CAAC;AAAA,EACxD;AACJ;AAEA,eAAsB,QAAQ,MAA2B;AACrD,SAAO,KAAK,QAAQ;AACxB;AAEO,SAAS,mBAAmB,MAAY,UAAmD;AAC9F,SAAO,KAAK,mBAAmB,QAAQ;AAC3C;AAEA,eAAsB,eAAe,MAAY,aAAyC;AACtF,SAAO,KAAK,eAAe,WAAW;AAC1C;AAKA,SAAS,KAAK,KAAqB;AAC/B,QAAM,IAAI,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG;AAC9C,SAAO,IAAI,SAAS,GAAG;AACnB,WAAO;AAAA,EACX;AACA,MAAI,OAAO,WAAW,eAAe,OAAO,MAAM;AAC9C,WAAO,OAAO,KAAK,GAAG;AAAA,EAC1B,OAAO;AACH,WAAO,OAAO,KAAK,KAAK,QAAQ,EAAE,SAAS,QAAQ;AAAA,EACvD;AACJ;AAEA,SAAS,eAAe,OAAwB;AAC5C,MAAI;AACA,UAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,UAAM,UAAU,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;AACzC,UAAM,MAAM,QAAQ;AACpB,QAAI,CAAC,IAAK,QAAO;AAEjB,WAAO,KAAK,IAAI,KAAM,MAAM,MAAQ;AAAA,EACxC,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  getPersistenceManager
3
- } from "./chunk-SZKHE2TQ.mjs";
3
+ } from "./chunk-VMO4IG3Q.mjs";
4
4
  import {
5
5
  getHttpClient
6
- } from "./chunk-C6SKWUQV.mjs";
6
+ } from "./chunk-SZNBHCPW.mjs";
7
7
  import {
8
8
  DocumentSnapshotImpl,
9
9
  QuerySnapshotImpl,
@@ -1707,7 +1707,7 @@ function subscribeToQuery(queryRef, onNext, onError, options) {
1707
1707
  };
1708
1708
  }
1709
1709
  async function getDocsWithPreviousState(queryRef, previousSnapshot) {
1710
- const { getHttpClient: getHttpClient2 } = await import("./http-SZFONH6Z.mjs");
1710
+ const { getHttpClient: getHttpClient2 } = await import("./http-IM4ZHBF6.mjs");
1711
1711
  const { createQuerySnapshot: createQuerySnapshot2, toFirestoreValue: toFirestoreValue3 } = await import("./snapshot-ZWZFIFZD.mjs");
1712
1712
  const client = getHttpClient2(queryRef.firestore);
1713
1713
  const constraints = "constraints" in queryRef ? queryRef.constraints : [];
@@ -2466,4 +2466,4 @@ export {
2466
2466
  offset,
2467
2467
  fastSearch
2468
2468
  };
2469
- //# sourceMappingURL=chunk-DXPQJR5D.mjs.map
2469
+ //# sourceMappingURL=chunk-6XAVSRLT.mjs.map
@@ -20,11 +20,23 @@ function initializeApp(options, name = DEFAULT_APP_NAME) {
20
20
  if (!options.projectId) {
21
21
  throw new Error("Firebase: projectId is required");
22
22
  }
23
+ if (!options.baseUrl) {
24
+ console.warn(
25
+ "[SDK] No se configur\xF3 baseUrl \u2014 usando http://localhost:3000 (Firestore dev)."
26
+ );
27
+ }
28
+ if (!options.storageUrl) {
29
+ console.warn(
30
+ "[SDK] No se configur\xF3 storageUrl \u2014 usando http://localhost:3002/api (Storage dev)."
31
+ );
32
+ }
23
33
  const app = {
24
34
  name,
25
35
  options: {
26
36
  ...options,
27
37
  baseUrl: options.baseUrl || "http://localhost:3000",
38
+ storageUrl: options.storageUrl || "http://localhost:3002/api",
39
+ storageBucket: options.storageBucket || "default",
28
40
  databaseId: options.databaseId || "(default)"
29
41
  }
30
42
  };
@@ -62,4 +74,4 @@ export {
62
74
  app_exports,
63
75
  init_app
64
76
  };
65
- //# sourceMappingURL=chunk-MRVKMKSO.mjs.map
77
+ //# sourceMappingURL=chunk-BV43NSDW.mjs.map