@rebasepro/client-firebase 0.4.0 → 0.6.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.
- package/README.md +97 -3
- package/dist/components/FirebaseLoginView.d.ts +2 -2
- package/dist/components/RebaseFirebaseApp.d.ts +2 -1
- package/dist/components/RebaseFirebaseAppProps.d.ts +0 -5
- package/dist/components/social_icons.d.ts +6 -6
- package/dist/hooks/useBuildUserManagement.d.ts +33 -2
- package/dist/index.es.js +2578 -3124
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +2689 -3165
- package/dist/index.umd.js.map +1 -1
- package/package.json +22 -22
- package/src/components/RebaseFirebaseApp.tsx +4 -8
- package/src/components/RebaseFirebaseAppProps.tsx +1 -6
- package/src/hooks/useBuildUserManagement.tsx +5 -10
- package/src/hooks/useFirestoreDriver.ts +3 -4
- package/dist/social_icons.d.ts +0 -6
- package/src/social_icons.tsx +0 -135
package/README.md
CHANGED
|
@@ -1,4 +1,98 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @rebasepro/client-firebase
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Firebase client adapter for Rebase — connects the Rebase admin panel to Firebase (Firestore, Auth, Storage).
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @rebasepro/client-firebase
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**Peer dependencies:** `firebase ^10.12.2 || ^11.0.0 || ^12.0.0`, `react >= 19.0.0`, `react-dom >= 19.0.0`, `typesense ^1.8.0` (optional)
|
|
12
|
+
|
|
13
|
+
## What This Package Does
|
|
14
|
+
|
|
15
|
+
This package provides the full Firebase integration layer for Rebase. It includes:
|
|
16
|
+
|
|
17
|
+
- A top-level `RebaseFirebaseApp` component that wires up Firebase Auth, Firestore, and Storage into a complete admin app with login, routing, and data management.
|
|
18
|
+
- React hooks for each Firebase service (auth, Firestore, storage, App Check, user management).
|
|
19
|
+
- Text search adapters (Algolia, Pinecone, Typesense, local, Rebase-hosted).
|
|
20
|
+
- Firebase login view with configurable sign-in providers.
|
|
21
|
+
|
|
22
|
+
## Key Exports
|
|
23
|
+
|
|
24
|
+
### Components
|
|
25
|
+
|
|
26
|
+
| Export | Description |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `RebaseFirebaseApp` | Full-featured Rebase app component backed by Firebase. Handles init, auth, routing, and rendering |
|
|
29
|
+
| `RebaseFirebaseAppProps` | Props type for `RebaseFirebaseApp` — name, logo, collections, views, signInOptions, plugins, etc. |
|
|
30
|
+
| `FirebaseLoginView` | Standalone Firebase login view with social sign-in buttons |
|
|
31
|
+
|
|
32
|
+
### Hooks
|
|
33
|
+
|
|
34
|
+
| Export | Description |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `useInitialiseFirebase` | Initializes the Firebase app from config |
|
|
37
|
+
| `useFirebaseAuthController` | Manages Firebase Auth state (sign-in, sign-out, user) |
|
|
38
|
+
| `useFirestoreDriver` | Creates a Firestore-backed `DataDriver` for CRUD and realtime listeners |
|
|
39
|
+
| `useFirebaseStorageSource` | Provides file upload/download via Firebase Storage |
|
|
40
|
+
| `useAppCheck` | Enables Firebase App Check verification |
|
|
41
|
+
| `useRecaptcha` | reCAPTCHA integration for App Check |
|
|
42
|
+
| `useBuildUserManagement` | Builds a user/role management delegate from Firestore |
|
|
43
|
+
| `useFirebaseAccessGate` | Evaluates whether the current user can access the admin panel |
|
|
44
|
+
| `useFirebaseRealTimeDBDelegate` | Realtime Database integration |
|
|
45
|
+
|
|
46
|
+
### Utils
|
|
47
|
+
|
|
48
|
+
| Export | Description |
|
|
49
|
+
|---|---|
|
|
50
|
+
| `buildAlgoliaSearchController` | Algolia text search adapter |
|
|
51
|
+
| `buildPineconeSearchController` | Pinecone text search adapter |
|
|
52
|
+
| `buildRebaseSearchController` | Rebase-hosted search adapter |
|
|
53
|
+
| `buildLocalTextSearchController` | Client-side fuzzy search (Fuse.js) |
|
|
54
|
+
| `buildTextSearchController` | Generic text search adapter builder |
|
|
55
|
+
| `buildCollectionsFromFirestore` | Auto-generate collection configs by introspecting Firestore data |
|
|
56
|
+
|
|
57
|
+
### Types
|
|
58
|
+
|
|
59
|
+
| Export | Description |
|
|
60
|
+
|---|---|
|
|
61
|
+
| `FirebaseSignInProvider` | Provider ID strings (`google.com`, `github.com`, etc.) |
|
|
62
|
+
| `FirebaseSignInOption` | Sign-in config with scopes and custom parameters |
|
|
63
|
+
| `FirebaseAuthController` | Extended auth controller type for Firebase |
|
|
64
|
+
| `FirebaseUserWrapper` | Rebase user wrapper around Firebase User |
|
|
65
|
+
| `FirestoreTextSearchControllerBuilder` | Builder type for text search controllers |
|
|
66
|
+
| `AppCheckOptions` | App Check configuration type |
|
|
67
|
+
|
|
68
|
+
## Quick Start
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
import { RebaseFirebaseApp } from "@rebasepro/client-firebase";
|
|
72
|
+
|
|
73
|
+
const firebaseConfig = {
|
|
74
|
+
apiKey: "...",
|
|
75
|
+
authDomain: "...",
|
|
76
|
+
projectId: "...",
|
|
77
|
+
storageBucket: "...",
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export default function App() {
|
|
81
|
+
return (
|
|
82
|
+
<RebaseFirebaseApp
|
|
83
|
+
name="My Admin"
|
|
84
|
+
firebaseConfig={firebaseConfig}
|
|
85
|
+
collections={[/* your collections */]}
|
|
86
|
+
signInOptions={["google.com"]}
|
|
87
|
+
/>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Related Packages
|
|
93
|
+
|
|
94
|
+
- `@rebasepro/admin` — Admin panel UI (Scaffold, Drawer, SideDialogs)
|
|
95
|
+
- `@rebasepro/core` — Core framework (Rebase provider, routing)
|
|
96
|
+
- `@rebasepro/common` — Shared data utilities
|
|
97
|
+
- `@rebasepro/types` — Shared type definitions
|
|
98
|
+
- `@rebasepro/ui` — UI component library
|
|
@@ -63,10 +63,10 @@ export interface FirebaseLoginViewProps {
|
|
|
63
63
|
|
|
64
64
|
* @category Firebase
|
|
65
65
|
*/
|
|
66
|
-
export declare function FirebaseLoginView({ children, allowSkipLogin, logo, signInOptions, firebaseApp, authController, noUserComponent, disableSignupScreen, disableResetPassword, disabled, additionalComponent, notAllowedError, className }: FirebaseLoginViewProps):
|
|
66
|
+
export declare function FirebaseLoginView({ children, allowSkipLogin, logo, signInOptions, firebaseApp, authController, noUserComponent, disableSignupScreen, disableResetPassword, disabled, additionalComponent, notAllowedError, className }: FirebaseLoginViewProps): React.JSX.Element;
|
|
67
67
|
export declare function LoginButton({ icon, onClick, text, disabled }: {
|
|
68
68
|
icon: React.ReactNode;
|
|
69
69
|
onClick: () => void;
|
|
70
70
|
text: string;
|
|
71
71
|
disabled?: boolean;
|
|
72
|
-
}):
|
|
72
|
+
}): React.JSX.Element;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { RebaseFirebaseAppProps } from "./RebaseFirebaseAppProps";
|
|
2
3
|
/**
|
|
3
4
|
* This is the default implementation of a Rebase app using the Firebase services
|
|
@@ -16,4 +17,4 @@ import { RebaseFirebaseAppProps } from "./RebaseFirebaseAppProps";
|
|
|
16
17
|
|
|
17
18
|
* @category Firebase
|
|
18
19
|
*/
|
|
19
|
-
export declare function RebaseFirebaseApp({ name, logo, logoDark, accessGate, collections, views, adminViews, textSearchControllerBuilder, allowSkipLogin, signInOptions, firebaseConfig, onFirebaseInit, appCheckOptions, dateTimeFormat, locale, basePath, baseCollectionPath, onAnalyticsEvent, propertyConfigs: propertyConfigsProp, plugins, autoOpenDrawer, firestoreIndexesBuilder, components, localTextSearchEnabled
|
|
20
|
+
export declare function RebaseFirebaseApp({ name, logo, logoDark, accessGate, collections, views, adminViews, textSearchControllerBuilder, allowSkipLogin, signInOptions, firebaseConfig, onFirebaseInit, appCheckOptions, dateTimeFormat, locale, basePath, baseCollectionPath, onAnalyticsEvent, propertyConfigs: propertyConfigsProp, plugins, autoOpenDrawer, firestoreIndexesBuilder, components, localTextSearchEnabled }: RebaseFirebaseAppProps): React.JSX.Element;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { AnalyticsEvent, AppView, AppViewsBuilder, EntityCollection, EntityCollectionsBuilder, RebasePlugin, Locale, PropertyConfig } from "@rebasepro/types";
|
|
3
3
|
import { FirebaseAccessGate } from "../hooks/useFirebaseAccessGate";
|
|
4
|
-
import { UserManagementDelegate } from "@rebasepro/types";
|
|
5
4
|
import { FirebaseApp } from "@firebase/app";
|
|
6
5
|
import { FirebaseLoginViewProps } from "./FirebaseLoginView";
|
|
7
6
|
import { AppCheckOptions, FirebaseSignInOption, FirebaseSignInProvider, FirebaseUserWrapper, FirestoreTextSearchControllerBuilder } from "../types";
|
|
@@ -128,10 +127,6 @@ export type RebaseFirebaseAppProps = {
|
|
|
128
127
|
firestoreIndexesBuilder?: FirestoreIndexesBuilder;
|
|
129
128
|
localTextSearchEnabled?: boolean;
|
|
130
129
|
components?: ComponentsRegistry;
|
|
131
|
-
/**
|
|
132
|
-
* Delegate for user and role management. Provides the admin views if specified.
|
|
133
|
-
*/
|
|
134
|
-
userManagement?: UserManagementDelegate<FirebaseUserWrapper>;
|
|
135
130
|
};
|
|
136
131
|
export type ComponentsRegistry = {
|
|
137
132
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export declare const googleIcon: (mode: "light" | "dark") => import("react
|
|
2
|
-
export declare const appleIcon: (mode: "light" | "dark") => import("react
|
|
3
|
-
export declare const githubIcon: (mode: "light" | "dark") => import("react
|
|
4
|
-
export declare const facebookIcon: (mode: "light" | "dark") => import("react
|
|
5
|
-
export declare const microsoftIcon: (mode: "light" | "dark") => import("react
|
|
6
|
-
export declare const twitterIcon: (mode: "light" | "dark") => import("react
|
|
1
|
+
export declare const googleIcon: (mode: "light" | "dark") => import("react").JSX.Element;
|
|
2
|
+
export declare const appleIcon: (mode: "light" | "dark") => import("react").JSX.Element;
|
|
3
|
+
export declare const githubIcon: (mode: "light" | "dark") => import("react").JSX.Element;
|
|
4
|
+
export declare const facebookIcon: (mode: "light" | "dark") => import("react").JSX.Element;
|
|
5
|
+
export declare const microsoftIcon: (mode: "light" | "dark") => import("react").JSX.Element;
|
|
6
|
+
export declare const twitterIcon: (mode: "light" | "dark") => import("react").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AuthController, DataDriver, User
|
|
1
|
+
import { AuthController, DataDriver, User } from "@rebasepro/types";
|
|
2
|
+
import { FirebaseAccessGate } from "./useFirebaseAccessGate";
|
|
2
3
|
export interface Role {
|
|
3
4
|
id: string;
|
|
4
5
|
name: string;
|
|
@@ -43,4 +44,34 @@ export interface UserManagementDelegateParams<CONTROLLER extends AuthController<
|
|
|
43
44
|
* @param roles
|
|
44
45
|
* @param allowDefaultRolesCreation
|
|
45
46
|
*/
|
|
46
|
-
export declare function useBuildUserManagement<CONTROLLER extends AuthController<User> = AuthController<User>, USER extends User = CONTROLLER extends AuthController<infer U> ? U : User>({ authController, dataSourceDelegate, roles: rolesProp, usersPath, rolesPath, allowDefaultRolesCreation }: UserManagementDelegateParams<CONTROLLER>):
|
|
47
|
+
export declare function useBuildUserManagement<CONTROLLER extends AuthController<User> = AuthController<User>, USER extends User = CONTROLLER extends AuthController<infer U> ? U : User>({ authController, dataSourceDelegate, roles: rolesProp, usersPath, rolesPath, allowDefaultRolesCreation }: UserManagementDelegateParams<CONTROLLER>): {
|
|
48
|
+
loading: boolean;
|
|
49
|
+
roles: Role[];
|
|
50
|
+
users: USER[];
|
|
51
|
+
saveUser: (user: USER) => Promise<USER>;
|
|
52
|
+
saveRole: (role: Role) => Promise<void>;
|
|
53
|
+
rolesError: Error | undefined;
|
|
54
|
+
deleteUser: (user: User) => Promise<void>;
|
|
55
|
+
deleteRole: (role: Role) => Promise<void>;
|
|
56
|
+
usersError: Error | undefined;
|
|
57
|
+
isAdmin: boolean;
|
|
58
|
+
allowDefaultRolesCreation: boolean;
|
|
59
|
+
defineRolesFor: (user: User) => string[] | undefined;
|
|
60
|
+
accessGate: FirebaseAccessGate<USER>;
|
|
61
|
+
} & CONTROLLER & {
|
|
62
|
+
initialLoading: boolean;
|
|
63
|
+
userRoles: string[] | undefined;
|
|
64
|
+
getUser: (uid: string) => USER | null;
|
|
65
|
+
user: {
|
|
66
|
+
roles: string[] | undefined;
|
|
67
|
+
uid: string;
|
|
68
|
+
displayName: string | null;
|
|
69
|
+
email: string | null;
|
|
70
|
+
photoURL: string | null;
|
|
71
|
+
providerId: string;
|
|
72
|
+
isAnonymous: boolean;
|
|
73
|
+
createdAt?: Date | string | null;
|
|
74
|
+
metadata?: Record<string, any>;
|
|
75
|
+
getIdToken?: (forceRefresh?: boolean) => Promise<string>;
|
|
76
|
+
} | null;
|
|
77
|
+
};
|