@sudobility/auth_lib 0.0.97 → 0.0.100

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.
@@ -1,4 +1,5 @@
1
1
  import type { OAuthCredential } from 'firebase/auth';
2
2
  import { type OAuthClientConfig, type WebAuthBridge } from './webAuthFlow';
3
+ export declare function reversedGoogleClientId(clientId: string): string;
3
4
  export declare function signInWithGoogleOAuthDesktop(config: OAuthClientConfig, webAuth: WebAuthBridge): Promise<OAuthCredential | null>;
4
5
  //# sourceMappingURL=google.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/oauth/google.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAOvB,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CASjC"}
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/oauth/google.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAevB,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI/D;AAOD,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CASjC"}
@@ -1,6 +1,14 @@
1
1
  import { GOOGLE_OAUTH_PROVIDER } from './providers';
2
2
  import { buildGoogleCredential } from './credentials';
3
3
  import { signInWithOAuthPkce, } from './webAuthFlow';
4
+ const GOOGLE_CLIENT_ID_SUFFIX = '.apps.googleusercontent.com';
5
+ const GOOGLE_REVERSED_CLIENT_ID_PREFIX = 'com.googleusercontent.apps.';
6
+ export function reversedGoogleClientId(clientId) {
7
+ if (!clientId.endsWith(GOOGLE_CLIENT_ID_SUFFIX))
8
+ return '';
9
+ const id = clientId.slice(0, -GOOGLE_CLIENT_ID_SUFFIX.length);
10
+ return id === '' ? '' : GOOGLE_REVERSED_CLIENT_ID_PREFIX + id;
11
+ }
4
12
  export async function signInWithGoogleOAuthDesktop(config, webAuth) {
5
13
  const tokens = await signInWithOAuthPkce(GOOGLE_OAUTH_PROVIDER, config, webAuth);
6
14
  if (!tokens)
@@ -1 +1 @@
1
- {"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/oauth/google.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAEL,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AAOvB,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAyB,EACzB,OAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,qBAAqB,EACrB,MAAM,EACN,OAAO,CACR,CAAC;IACF,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC9E,OAAO,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/oauth/google.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAEL,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AAEvB,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,gCAAgC,GAAG,6BAA6B,CAAC;AAYvE,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3D,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gCAAgC,GAAG,EAAE,CAAC;AAChE,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAyB,EACzB,OAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,qBAAqB,EACrB,MAAM,EACN,OAAO,CACR,CAAC;IACF,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC9E,OAAO,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type SignInPlatform = 'ios' | 'android' | 'macos' | 'windows' | 'web';
2
+ export interface SignInConfig {
3
+ googleIosClientId: string;
4
+ googleWebClientId: string;
5
+ appleServiceId: string;
6
+ appleRedirectUri: string;
7
+ }
8
+ export declare function isDesktopPlatform(platform: SignInPlatform): boolean;
9
+ export declare function googleSignInAvailable(platform: SignInPlatform, config: SignInConfig): boolean;
10
+ export declare function appleSignInAvailable(platform: SignInPlatform, config: SignInConfig): boolean;
11
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/signin/config.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;AAE7E,MAAM,WAAW,YAAY;IAO3B,iBAAiB,EAAE,MAAM,CAAC;IAO1B,iBAAiB,EAAE,MAAM,CAAC;IAM1B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAEnE;AAGD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,GACnB,OAAO,CAST;AAGD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,GACnB,OAAO,CAMT"}
@@ -0,0 +1,21 @@
1
+ import { reversedGoogleClientId } from '../oauth/google';
2
+ export function isDesktopPlatform(platform) {
3
+ return platform === 'macos' || platform === 'windows';
4
+ }
5
+ export function googleSignInAvailable(platform, config) {
6
+ if (isDesktopPlatform(platform) || platform === 'ios') {
7
+ return reversedGoogleClientId(config.googleIosClientId) !== '';
8
+ }
9
+ if (platform === 'android')
10
+ return config.googleWebClientId !== '';
11
+ return false;
12
+ }
13
+ export function appleSignInAvailable(platform, config) {
14
+ if (platform === 'ios')
15
+ return true;
16
+ if (platform === 'android') {
17
+ return config.appleServiceId !== '' && config.appleRedirectUri !== '';
18
+ }
19
+ return false;
20
+ }
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/signin/config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AA6BzD,MAAM,UAAU,iBAAiB,CAAC,QAAwB;IACxD,OAAO,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,CAAC;AACxD,CAAC;AAGD,MAAM,UAAU,qBAAqB,CACnC,QAAwB,EACxB,MAAoB;IAEpB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAItD,OAAO,sBAAsB,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,iBAAiB,KAAK,EAAE,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,MAAM,UAAU,oBAAoB,CAClC,QAAwB,EACxB,MAAoB;IAEpB,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,cAAc,KAAK,EAAE,IAAI,MAAM,CAAC,gBAAgB,KAAK,EAAE,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { OAuthCredential } from 'firebase/auth';
2
+ import type { WebAuthBridge } from '../oauth/webAuthFlow';
3
+ import { type SignInConfig, type SignInPlatform } from './config';
4
+ export interface GoogleSignInBridge {
5
+ configure(params: {
6
+ iosClientId?: string;
7
+ webClientId?: string;
8
+ }): void;
9
+ hasPlayServices(): Promise<boolean>;
10
+ signIn(): Promise<{
11
+ type: string;
12
+ data: {
13
+ idToken: string | null;
14
+ } | null;
15
+ }>;
16
+ }
17
+ export interface AppleAuthBridge<Operation = unknown, Scope = unknown> {
18
+ Operation: {
19
+ LOGIN: Operation;
20
+ };
21
+ Scope: {
22
+ EMAIL: Scope;
23
+ FULL_NAME: Scope;
24
+ };
25
+ Error: {
26
+ CANCELED: string;
27
+ };
28
+ performRequest(options: {
29
+ requestedOperation: Operation;
30
+ requestedScopes: Scope[];
31
+ }): Promise<{
32
+ identityToken: string | null;
33
+ nonce?: string | null;
34
+ }>;
35
+ }
36
+ export interface AppleAuthAndroidBridge<ResponseType = unknown, Scope = unknown> {
37
+ isSupported: boolean;
38
+ ResponseType: {
39
+ ALL: ResponseType;
40
+ };
41
+ Scope: {
42
+ ALL: Scope;
43
+ };
44
+ Error: {
45
+ SIGNIN_CANCELLED: string;
46
+ };
47
+ configure(config: {
48
+ clientId: string;
49
+ redirectUri: string;
50
+ responseType: ResponseType;
51
+ scope: Scope;
52
+ }): void;
53
+ signIn(): Promise<{
54
+ id_token?: string;
55
+ nonce?: string;
56
+ }>;
57
+ }
58
+ export interface GoogleSignInModules {
59
+ webAuth?: WebAuthBridge;
60
+ googleSignIn?: () => GoogleSignInBridge;
61
+ }
62
+ export interface AppleSignInModules<Operation = unknown, Scope = unknown, ResponseType = unknown, AndroidScope = unknown> {
63
+ appleAuth?: () => AppleAuthBridge<Operation, Scope>;
64
+ appleAuthAndroid?: () => AppleAuthAndroidBridge<ResponseType, AndroidScope>;
65
+ }
66
+ export declare function googleCredential(platform: SignInPlatform, config: SignInConfig, modules: GoogleSignInModules): Promise<OAuthCredential | null>;
67
+ export declare function appleCredential<Operation, Scope, ResponseType, AndroidScope>(platform: SignInPlatform, config: SignInConfig, modules: AppleSignInModules<Operation, Scope, ResponseType, AndroidScope>): Promise<OAuthCredential | null>;
68
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/signin/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { buildAppleCredential, buildGoogleCredential, } from '../oauth/credentials';
2
+ import { reversedGoogleClientId, signInWithGoogleOAuthDesktop, } from '../oauth/google';
3
+ import { isDesktopPlatform, } from './config';
4
+ function missing(what) {
5
+ throw new Error(`${what} is not available on this platform`);
6
+ }
7
+ export async function googleCredential(platform, config, modules) {
8
+ if (isDesktopPlatform(platform)) {
9
+ const webAuth = modules.webAuth ?? missing('WebAuth');
10
+ return signInWithGoogleOAuthDesktop({
11
+ clientId: config.googleIosClientId,
12
+ reversedClientId: reversedGoogleClientId(config.googleIosClientId),
13
+ }, webAuth);
14
+ }
15
+ const GoogleSignin = (modules.googleSignIn ?? missing('GoogleSignin'))();
16
+ GoogleSignin.configure(platform === 'android'
17
+ ? { webClientId: config.googleWebClientId }
18
+ : { iosClientId: config.googleIosClientId });
19
+ await GoogleSignin.hasPlayServices();
20
+ const response = await GoogleSignin.signIn();
21
+ if (response.type === 'cancelled')
22
+ return null;
23
+ const idToken = response.data?.idToken;
24
+ if (!idToken)
25
+ throw new Error('No ID token from Google');
26
+ return buildGoogleCredential(idToken);
27
+ }
28
+ export async function appleCredential(platform, config, modules) {
29
+ if (platform === 'android') {
30
+ const appleAuthAndroid = (modules.appleAuthAndroid ?? missing('appleAuthAndroid'))();
31
+ if (!appleAuthAndroid.isSupported) {
32
+ throw new Error('Apple sign-in is not supported on this device');
33
+ }
34
+ appleAuthAndroid.configure({
35
+ clientId: config.appleServiceId,
36
+ redirectUri: config.appleRedirectUri,
37
+ responseType: appleAuthAndroid.ResponseType.ALL,
38
+ scope: appleAuthAndroid.Scope.ALL,
39
+ });
40
+ try {
41
+ const response = await appleAuthAndroid.signIn();
42
+ if (!response.id_token)
43
+ throw new Error('No identity token from Apple');
44
+ return buildAppleCredential({
45
+ idToken: response.id_token,
46
+ ...(response.nonce ? { rawNonce: response.nonce } : {}),
47
+ });
48
+ }
49
+ catch (error) {
50
+ if (errorCode(error) === appleAuthAndroid.Error.SIGNIN_CANCELLED) {
51
+ return null;
52
+ }
53
+ throw error;
54
+ }
55
+ }
56
+ const appleAuth = (modules.appleAuth ?? missing('appleAuth'))();
57
+ try {
58
+ const response = await appleAuth.performRequest({
59
+ requestedOperation: appleAuth.Operation.LOGIN,
60
+ requestedScopes: [appleAuth.Scope.EMAIL, appleAuth.Scope.FULL_NAME],
61
+ });
62
+ if (!response.identityToken) {
63
+ throw new Error('No identity token from Apple');
64
+ }
65
+ return buildAppleCredential({
66
+ idToken: response.identityToken,
67
+ ...(response.nonce ? { rawNonce: response.nonce } : {}),
68
+ });
69
+ }
70
+ catch (error) {
71
+ if (errorCode(error) === appleAuth.Error.CANCELED)
72
+ return null;
73
+ throw error;
74
+ }
75
+ }
76
+ function errorCode(error) {
77
+ if (typeof error !== 'object' || error === null)
78
+ return undefined;
79
+ const code = error.code;
80
+ if (typeof code === 'string')
81
+ return code;
82
+ const message = error.message;
83
+ return typeof message === 'string' ? message : undefined;
84
+ }
85
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/signin/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type Auth } from 'firebase/auth';
2
+ export interface FirebaseJsAuthConfig {
3
+ apiKey: string;
4
+ authDomain: string;
5
+ projectId: string;
6
+ }
7
+ export interface PersistenceStorage {
8
+ getItem(key: string): Promise<string | null>;
9
+ setItem(key: string, value: string): Promise<void>;
10
+ removeItem(key: string): Promise<void>;
11
+ }
12
+ export declare function createFirebaseJsAuth(config: FirebaseJsAuthConfig, storage: PersistenceStorage): Auth | null;
13
+ //# sourceMappingURL=firebase-js-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-js-auth.d.ts","sourceRoot":"","sources":["../../src/signin/firebase-js-auth.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,IAAI,EAIV,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAgBD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,IAAI,CAiBb"}
@@ -0,0 +1,20 @@
1
+ import { getApps, initializeApp } from 'firebase/app';
2
+ import * as firebaseAuthModule from 'firebase/auth';
3
+ import { getAuth, initializeAuth, } from 'firebase/auth';
4
+ export function createFirebaseJsAuth(config, storage) {
5
+ if (!config.apiKey)
6
+ return null;
7
+ const existing = getApps()[0];
8
+ if (existing)
9
+ return getAuth(existing);
10
+ const app = initializeApp({
11
+ apiKey: config.apiKey,
12
+ authDomain: config.authDomain,
13
+ projectId: config.projectId,
14
+ });
15
+ const persistenceFor = firebaseAuthModule.getReactNativePersistence;
16
+ return persistenceFor
17
+ ? initializeAuth(app, { persistence: persistenceFor(storage) })
18
+ : getAuth(app);
19
+ }
20
+ //# sourceMappingURL=firebase-js-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-js-auth.js","sourceRoot":"","sources":["../../src/signin/firebase-js-auth.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,kBAAkB,MAAM,eAAe,CAAC;AACpD,OAAO,EAEL,OAAO,EACP,cAAc,GAEf,MAAM,eAAe,CAAC;AA6BvB,MAAM,UAAU,oBAAoB,CAClC,MAA4B,EAC5B,OAA2B;IAE3B,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,GAAG,GAAgB,aAAa,CAAC;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IACH,MAAM,cAAc,GAClB,kBAGD,CAAC,yBAAyB,CAAC;IAC5B,OAAO,cAAc;QACnB,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './credentials';
3
+ export * from './firebase-js-auth';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signin/index.ts"],"names":[],"mappings":"AAQA,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './credentials';
3
+ export * from './firebase-js-auth';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signin/index.ts"],"names":[],"mappings":"AAQA,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/auth_lib",
3
- "version": "0.0.97",
3
+ "version": "0.0.100",
4
4
  "description": "Firebase authentication utilities with token refresh handling",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,6 +19,10 @@
19
19
  "import": "./dist/oauth/index.js",
20
20
  "types": "./dist/oauth/index.d.ts"
21
21
  },
22
+ "./signin": {
23
+ "import": "./dist/signin/index.js",
24
+ "types": "./dist/signin/index.d.ts"
25
+ },
22
26
  "./auth-js": {
23
27
  "import": "./dist/auth/index.js",
24
28
  "types": "./dist/auth/index.d.ts"
@@ -49,8 +53,8 @@
49
53
  "firebase": "^12.7.0",
50
54
  "@react-native-firebase/app": ">=18.0.0",
51
55
  "@react-native-firebase/auth": ">=18.0.0",
52
- "@sudobility/di": "^1.5.65",
53
- "@sudobility/types": "^1.9.67",
56
+ "@sudobility/di": "^1.5.67",
57
+ "@sudobility/types": "^1.9.68",
54
58
  "@tanstack/react-query": "^5.0.0"
55
59
  },
56
60
  "peerDependenciesMeta": {
@@ -65,8 +69,9 @@
65
69
  }
66
70
  },
67
71
  "devDependencies": {
68
- "@sudobility/di": "^1.5.65",
69
- "@sudobility/types": "^1.9.67",
72
+ "firebase": "^12.7.0",
73
+ "@sudobility/di": "^1.5.67",
74
+ "@sudobility/types": "^1.9.68",
70
75
  "@tanstack/react-query": "^5.80.7",
71
76
  "@types/node": "^22.0.0",
72
77
  "vitest": "^4.0.4",