fire-pilot-rn 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.
- package/GoogleService-Info.plist +30 -0
- package/LICENSE +21 -0
- package/README.md +391 -0
- package/build/commands/enable.d.ts +2 -0
- package/build/commands/enable.d.ts.map +1 -0
- package/build/commands/enable.js +73 -0
- package/build/commands/enable.js.map +1 -0
- package/build/commands/login.d.ts +2 -0
- package/build/commands/login.d.ts.map +1 -0
- package/build/commands/login.js +117 -0
- package/build/commands/login.js.map +1 -0
- package/build/commands/setup.d.ts +2 -0
- package/build/commands/setup.d.ts.map +1 -0
- package/build/commands/setup.js +297 -0
- package/build/commands/setup.js.map +1 -0
- package/build/commands/sha.d.ts +7 -0
- package/build/commands/sha.d.ts.map +1 -0
- package/build/commands/sha.js +165 -0
- package/build/commands/sha.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +59 -0
- package/build/index.js.map +1 -0
- package/build/utils/checker.d.ts +2 -0
- package/build/utils/checker.d.ts.map +1 -0
- package/build/utils/checker.js +100 -0
- package/build/utils/checker.js.map +1 -0
- package/build/utils/logger.d.ts +11 -0
- package/build/utils/logger.d.ts.map +1 -0
- package/build/utils/logger.js +18 -0
- package/build/utils/logger.js.map +1 -0
- package/build/utils/runner.d.ts +7 -0
- package/build/utils/runner.d.ts.map +1 -0
- package/build/utils/runner.js +125 -0
- package/build/utils/runner.js.map +1 -0
- package/dist/commands/enable.d.ts +2 -0
- package/dist/commands/enable.d.ts.map +1 -0
- package/dist/commands/enable.js +65 -0
- package/dist/commands/enable.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +86 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/setup.d.ts +2 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +133 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/sha.d.ts +2 -0
- package/dist/commands/sha.d.ts.map +1 -0
- package/dist/commands/sha.js +118 -0
- package/dist/commands/sha.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/checker.d.ts +2 -0
- package/dist/utils/checker.d.ts.map +1 -0
- package/dist/utils/checker.js +100 -0
- package/dist/utils/checker.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +18 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/runner.d.ts +4 -0
- package/dist/utils/runner.d.ts.map +1 -0
- package/dist/utils/runner.js +36 -0
- package/dist/utils/runner.js.map +1 -0
- package/google-services.json +48 -0
- package/package.json +51 -0
- package/src/commands/enable.ts +80 -0
- package/src/commands/login.ts +119 -0
- package/src/commands/setup.ts +313 -0
- package/src/commands/sha.ts +177 -0
- package/src/index.ts +65 -0
- package/src/utils/checker.ts +70 -0
- package/src/utils/logger.ts +13 -0
- package/src/utils/runner.ts +98 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>API_KEY</key>
|
|
6
|
+
<string>AIzaSyAN_5xSM-bJ15gZ5hqANvb7bL2r7UYMBaw</string>
|
|
7
|
+
<key>GCM_SENDER_ID</key>
|
|
8
|
+
<string>380729955105</string>
|
|
9
|
+
<key>PLIST_VERSION</key>
|
|
10
|
+
<string>1</string>
|
|
11
|
+
<key>BUNDLE_ID</key>
|
|
12
|
+
<string>com.firepilotlearn</string>
|
|
13
|
+
<key>PROJECT_ID</key>
|
|
14
|
+
<string>fire-pilot-rn123</string>
|
|
15
|
+
<key>STORAGE_BUCKET</key>
|
|
16
|
+
<string>fire-pilot-rn123.firebasestorage.app</string>
|
|
17
|
+
<key>IS_ADS_ENABLED</key>
|
|
18
|
+
<false></false>
|
|
19
|
+
<key>IS_ANALYTICS_ENABLED</key>
|
|
20
|
+
<false></false>
|
|
21
|
+
<key>IS_APPINVITE_ENABLED</key>
|
|
22
|
+
<true></true>
|
|
23
|
+
<key>IS_GCM_ENABLED</key>
|
|
24
|
+
<true></true>
|
|
25
|
+
<key>IS_SIGNIN_ENABLED</key>
|
|
26
|
+
<true></true>
|
|
27
|
+
<key>GOOGLE_APP_ID</key>
|
|
28
|
+
<string>1:380729955105:ios:5fbd1373aa02d8205de460</string>
|
|
29
|
+
</dict>
|
|
30
|
+
</plist>
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Your Name
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
# 🔥 fire-pilot-rn
|
|
2
|
+
|
|
3
|
+
> Elite Firebase setup orchestrator for React Native — automates account login, project selection, app creation, config file download, and SHA key registration in one guided wizard.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
- [Overview](#overview)
|
|
10
|
+
- [Prerequisites](#prerequisites)
|
|
11
|
+
- [Installation](#installation)
|
|
12
|
+
- [Quick Start](#quick-start)
|
|
13
|
+
- [Commands](#commands)
|
|
14
|
+
- [firebase setup](#firebase-setup)
|
|
15
|
+
- [firebase login](#firebase-login)
|
|
16
|
+
- [firebase sha add](#firebase-sha-add)
|
|
17
|
+
- [firebase enable](#firebase-enable)
|
|
18
|
+
- [Step-by-Step Walkthrough](#step-by-step-walkthrough)
|
|
19
|
+
- [Troubleshooting](#troubleshooting)
|
|
20
|
+
- [Development](#development)
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Overview
|
|
25
|
+
|
|
26
|
+
`fire-pilot-rn` is a CLI tool that eliminates the repetitive manual work of wiring Firebase into a React Native project. Instead of switching between the Firebase Console, terminal, and documentation, you run a single command and follow the prompts.
|
|
27
|
+
|
|
28
|
+
What it does automatically:
|
|
29
|
+
|
|
30
|
+
- Checks and installs required tools (Node.js, Firebase CLI, Java)
|
|
31
|
+
- Manages multiple Firebase / Google accounts
|
|
32
|
+
- Lists your real Firebase projects — no typing project IDs by hand
|
|
33
|
+
- Creates Android and iOS Firebase apps if they don't exist yet
|
|
34
|
+
- Downloads `google-services.json` and `GoogleService-Info.plist` to the correct paths in your project
|
|
35
|
+
- Extracts SHA-1 and SHA-256 fingerprints from your Android debug keystore
|
|
36
|
+
- Registers those SHA keys with Firebase
|
|
37
|
+
- Installs `@react-native-firebase` feature packages with correct peer dependencies
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Prerequisites
|
|
42
|
+
|
|
43
|
+
Before running the CLI, make sure the following are installed on your machine:
|
|
44
|
+
|
|
45
|
+
| Tool | Required For | Install |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| **Node.js** v16+ | Running the CLI | https://nodejs.org |
|
|
48
|
+
| **npm** | Installing packages | Comes with Node.js |
|
|
49
|
+
| **Firebase CLI** | All Firebase operations | `npm install -g firebase-tools` |
|
|
50
|
+
| **Java JDK** (keytool) | SHA key extraction | https://adoptium.net |
|
|
51
|
+
| **React Native project** | Running setup inside a project folder | https://reactnative.dev |
|
|
52
|
+
|
|
53
|
+
> The CLI will attempt to auto-install Node.js (via `brew` on macOS, `winget` on Windows) and the Firebase CLI if they are missing. Java must be installed manually.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Installation
|
|
58
|
+
|
|
59
|
+
### Option A — Install globally from npm (once published)
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npm install -g fire-pilot-rn
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Option B — Install from source (development)
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
git clone https://github.com/your-username/fire-pilot-rn.git
|
|
69
|
+
cd fire-pilot-rn
|
|
70
|
+
npm install
|
|
71
|
+
npm run build
|
|
72
|
+
npm link
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
After `npm link`, the `fire-pilot-rn` command is available globally.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Quick Start
|
|
80
|
+
|
|
81
|
+
Navigate into your React Native project folder, then run:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
cd /path/to/your/react-native-project
|
|
85
|
+
fire-pilot-rn firebase setup --full
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This single command runs the complete wizard — tools check, login, project selection, app creation, config download, and SHA registration.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Commands
|
|
93
|
+
|
|
94
|
+
### `firebase setup`
|
|
95
|
+
|
|
96
|
+
The main wizard. Walks you through all steps in the correct order.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
fire-pilot-rn firebase setup # steps 1–5 only
|
|
100
|
+
fire-pilot-rn firebase setup --full # all steps including SHA key registration (step 6)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Steps performed:**
|
|
104
|
+
|
|
105
|
+
| Step | What Happens |
|
|
106
|
+
|---|---|
|
|
107
|
+
| **1 — Tools Check** | Verifies Node.js, npm, Firebase CLI, and Java are installed. Installs missing tools automatically where possible. |
|
|
108
|
+
| **2 — Firebase Login** | Opens the account manager. You can login, switch accounts, list accounts, or skip. |
|
|
109
|
+
| **3 — Firebase Project** | Lists all your existing Firebase projects. Choose one or create a new project. |
|
|
110
|
+
| **4 — Install Core Package** | Runs `npm install @react-native-firebase/app` in your project. |
|
|
111
|
+
| **5 — App Setup** | Asks which platforms (Android / iOS), your package name / bundle ID, then creates the Firebase app if it doesn't exist and downloads the config files. |
|
|
112
|
+
| **6 — SHA Keys** *(--full only)* | Extracts SHA-1 and SHA-256 from your Android debug keystore and registers them with the Firebase project. |
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### `firebase login`
|
|
117
|
+
|
|
118
|
+
Opens the account manager as a standalone command.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
fire-pilot-rn firebase login
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Menu options:**
|
|
125
|
+
|
|
126
|
+
| Option | What It Does |
|
|
127
|
+
|---|---|
|
|
128
|
+
| 🔑 Login with a new Google account | Runs `firebase login:add` — opens a browser to add a second / third account without replacing the current one |
|
|
129
|
+
| 🔄 Switch to a different account | Shows a list of all registered accounts to switch between (only appears when 2+ accounts are registered) |
|
|
130
|
+
| 📋 List all logged-in accounts | Displays all currently registered accounts inline, refreshed live |
|
|
131
|
+
| 🚪 Logout from current account | Logs out with a confirmation prompt |
|
|
132
|
+
| ⬅️ Continue to next step | Exits the menu |
|
|
133
|
+
|
|
134
|
+
> **Note:** The Firebase CLI and Chrome browser use separate account stores. Accounts logged in via Chrome are not automatically available here. Use **"Login with a new Google account"** to register each account with the Firebase CLI.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### `firebase sha add`
|
|
139
|
+
|
|
140
|
+
Standalone SHA key registration — can be run any time after your project has an Android debug keystore.
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
fire-pilot-rn firebase sha add
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**What it does:**
|
|
147
|
+
|
|
148
|
+
1. Locates `keytool` (from your Java installation)
|
|
149
|
+
2. Reads `~/.android/debug.keystore` (created the first time you build your RN Android app)
|
|
150
|
+
3. Extracts SHA-1 and SHA-256 fingerprints
|
|
151
|
+
4. Shows a list of your Firebase projects to select from
|
|
152
|
+
5. Shows the Android apps in that project to select from
|
|
153
|
+
6. Registers both SHA keys with Firebase
|
|
154
|
+
|
|
155
|
+
> Run `npx react-native run-android` at least once to generate the debug keystore before using this command.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### `firebase enable`
|
|
160
|
+
|
|
161
|
+
Installs additional `@react-native-firebase` feature packages into your project.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
fire-pilot-rn firebase enable # interactive checkbox menu
|
|
165
|
+
fire-pilot-rn firebase enable auth # install a specific feature directly
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Available features:**
|
|
169
|
+
|
|
170
|
+
| Key | Feature | Package |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
| `auth` | 🔐 Authentication | `@react-native-firebase/auth` |
|
|
173
|
+
| `firestore` | 🗄️ Firestore Database | `@react-native-firebase/firestore` |
|
|
174
|
+
| `storage` | 📦 Cloud Storage | `@react-native-firebase/storage` |
|
|
175
|
+
| `messaging` | 📲 Cloud Messaging (FCM) | `@react-native-firebase/messaging` |
|
|
176
|
+
| `analytics` | 📈 Analytics | `@react-native-firebase/analytics` |
|
|
177
|
+
| `crashlytics` | 💥 Crashlytics | `@react-native-firebase/crashlytics` |
|
|
178
|
+
| `database` | ⚡ Realtime Database | `@react-native-firebase/database` |
|
|
179
|
+
| `functions` | ☁️ Cloud Functions | `@react-native-firebase/functions` |
|
|
180
|
+
| `remote` | 🎛️ Remote Config | `@react-native-firebase/remote-config` |
|
|
181
|
+
| `perf` | ⏱️ Performance Monitoring | `@react-native-firebase/perf` |
|
|
182
|
+
|
|
183
|
+
The CLI upgrades `@react-native-firebase/app` to the latest version first, then installs the feature package — this avoids peer dependency conflicts.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Step-by-Step Walkthrough
|
|
188
|
+
|
|
189
|
+
This section shows exactly what to expect when running `fire-pilot-rn firebase setup --full` for the first time.
|
|
190
|
+
|
|
191
|
+
### Step 1 — Navigate to your React Native project
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
cd /path/to/MyApp
|
|
195
|
+
fire-pilot-rn firebase setup --full
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Step 2 — Tools are checked automatically
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
✅ Node.js found: v20.x.x
|
|
202
|
+
✅ NPM found: v10.x.x
|
|
203
|
+
✅ Firebase CLI found: v15.x.x
|
|
204
|
+
✅ Java keytool found ✓
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
If a tool is missing, the CLI will try to install it. Java must be installed manually.
|
|
208
|
+
|
|
209
|
+
### Step 3 — Manage your Firebase login
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
? Do you want to manage your Firebase login now? Yes
|
|
213
|
+
|
|
214
|
+
🚀 Firebase Account Manager
|
|
215
|
+
|
|
216
|
+
ℹ️ Currently logged-in accounts:
|
|
217
|
+
1. you@gmail.com
|
|
218
|
+
|
|
219
|
+
? What do you want to do?
|
|
220
|
+
❯ 🔑 Login with a new Google account
|
|
221
|
+
🔄 Switch to a different account
|
|
222
|
+
📋 List all logged-in accounts
|
|
223
|
+
🚪 Logout from current account
|
|
224
|
+
⬅️ Continue to next step
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
- If you only have one account, select **⬅️ Continue to next step**.
|
|
228
|
+
- To add another Google account, select **🔑 Login with a new Google account** — this opens your browser. After signing in, the new account appears in the list.
|
|
229
|
+
|
|
230
|
+
### Step 4 — Select or create a Firebase project
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
? What do you want to do?
|
|
234
|
+
❯ ➕ Create a new Firebase project
|
|
235
|
+
✅ Use an existing project
|
|
236
|
+
|
|
237
|
+
? Select the Firebase project to use:
|
|
238
|
+
❯ My App (my-app-abc12)
|
|
239
|
+
Old Project (old-project-xyz)
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Existing projects are fetched live from your Firebase account — no manual typing of project IDs.
|
|
243
|
+
|
|
244
|
+
### Step 5 — Firebase app setup (Android / iOS)
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
? Create or configure Firebase apps for: (Press space to select)
|
|
248
|
+
❯ ◉ Android
|
|
249
|
+
◉ iOS
|
|
250
|
+
|
|
251
|
+
? Enter the Firebase app display name: MyApp
|
|
252
|
+
? Enter the Android package name: com.company.myapp
|
|
253
|
+
? Enter the iOS bundle identifier: com.company.myapp
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
The CLI will:
|
|
257
|
+
- Check if a Firebase app with that package name / bundle ID already exists
|
|
258
|
+
- Create one if it does not
|
|
259
|
+
- Download and write the config files automatically:
|
|
260
|
+
- `android/app/google-services.json`
|
|
261
|
+
- `ios/MyApp/GoogleService-Info.plist`
|
|
262
|
+
|
|
263
|
+
### Step 6 — SHA key registration (`--full` only)
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
🔐 SHA Key Registration
|
|
267
|
+
|
|
268
|
+
✅ SHA-1: AA:BB:CC:...
|
|
269
|
+
✅ SHA-256: 11:22:33:...
|
|
270
|
+
|
|
271
|
+
? Select your Firebase project: My App (my-app-abc12)
|
|
272
|
+
? Select the Android app: MyApp (com.company.myapp)
|
|
273
|
+
|
|
274
|
+
✅ SHA-1 registered successfully!
|
|
275
|
+
✅ SHA-256 registered successfully!
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
The debug keystore at `~/.android/debug.keystore` is read automatically — no manual keytool commands needed.
|
|
279
|
+
|
|
280
|
+
### After setup — configure your Android project
|
|
281
|
+
|
|
282
|
+
After setup completes, follow the standard React Native Firebase native setup:
|
|
283
|
+
|
|
284
|
+
**Android — `android/build.gradle`:**
|
|
285
|
+
```gradle
|
|
286
|
+
buildscript {
|
|
287
|
+
dependencies {
|
|
288
|
+
classpath 'com.google.gms:google-services:4.4.0'
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Android — `android/app/build.gradle`:**
|
|
294
|
+
```gradle
|
|
295
|
+
apply plugin: 'com.google.gms.google-services'
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**iOS — run pod install:**
|
|
299
|
+
```bash
|
|
300
|
+
cd ios && pod install
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Full native setup documentation: https://rnfirebase.io
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Troubleshooting
|
|
308
|
+
|
|
309
|
+
### "Java keytool not found"
|
|
310
|
+
|
|
311
|
+
The CLI uses `which keytool` to detect Java. If it is not found:
|
|
312
|
+
|
|
313
|
+
1. Install Java from https://adoptium.net
|
|
314
|
+
2. Make sure `JAVA_HOME` is set, or that `keytool` is on your `PATH`
|
|
315
|
+
3. Verify with: `which keytool`
|
|
316
|
+
|
|
317
|
+
### "No debug keystore found" / SHA keys not found
|
|
318
|
+
|
|
319
|
+
The Android debug keystore is created the first time you build the Android app. Run:
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
npx react-native run-android
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Then run `fire-pilot-rn firebase sha add` again.
|
|
326
|
+
|
|
327
|
+
### "Only one account is registered" when trying to switch
|
|
328
|
+
|
|
329
|
+
The Firebase CLI and your Chrome browser use separate account stores. To register a second Firebase account:
|
|
330
|
+
|
|
331
|
+
1. Select **🔑 Login with a new Google account** in the login menu
|
|
332
|
+
2. Sign in with the second account in the browser that opens
|
|
333
|
+
3. Both accounts will now appear in the list
|
|
334
|
+
|
|
335
|
+
### npm peer dependency errors when enabling features
|
|
336
|
+
|
|
337
|
+
The `enable` command handles this automatically by upgrading `@react-native-firebase/app` to the latest version before installing the feature. If you still see errors, run manually:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
npm install @react-native-firebase/app@latest
|
|
341
|
+
npm install @react-native-firebase/auth # replace with your feature
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Firebase project creation fails with "quota exceeded"
|
|
345
|
+
|
|
346
|
+
Free Firebase accounts are limited to a small number of projects. Delete unused projects at https://console.firebase.google.com before creating a new one.
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## Development
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
# Clone and install
|
|
354
|
+
git clone https://github.com/your-username/fire-pilot-rn.git
|
|
355
|
+
cd fire-pilot-rn
|
|
356
|
+
npm install
|
|
357
|
+
|
|
358
|
+
# Build TypeScript → build/
|
|
359
|
+
npm run build
|
|
360
|
+
|
|
361
|
+
# Link globally for local testing
|
|
362
|
+
npm link
|
|
363
|
+
|
|
364
|
+
# Run directly with ts-node (no build needed)
|
|
365
|
+
npm run dev -- firebase setup --full
|
|
366
|
+
|
|
367
|
+
# Rebuild and relink after changes
|
|
368
|
+
npm run build && npm link
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**Project structure:**
|
|
372
|
+
|
|
373
|
+
```
|
|
374
|
+
src/
|
|
375
|
+
index.ts # CLI entry point, command registration
|
|
376
|
+
commands/
|
|
377
|
+
setup.ts # Full setup wizard (steps 1–6)
|
|
378
|
+
login.ts # Firebase account manager
|
|
379
|
+
sha.ts # SHA key extraction and registration
|
|
380
|
+
enable.ts # Feature package installer
|
|
381
|
+
utils/
|
|
382
|
+
checker.ts # Tool presence checks and auto-install
|
|
383
|
+
runner.ts # Shell command execution helpers
|
|
384
|
+
logger.ts # Styled console output
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## License
|
|
390
|
+
|
|
391
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../src/commands/enable.ts"],"names":[],"mappings":"AAqBA,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCnE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.enableCommand = enableCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const runner_1 = require("../utils/runner");
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
// Always keep the core package in sync with installed feature packages.
|
|
11
|
+
const CORE_PACKAGE = '@react-native-firebase/app';
|
|
12
|
+
// All supported RN Firebase packages
|
|
13
|
+
const FEATURES = {
|
|
14
|
+
auth: { label: '🔐 Authentication', pkg: '@react-native-firebase/auth' },
|
|
15
|
+
firestore: { label: '🗄️ Firestore Database', pkg: '@react-native-firebase/firestore' },
|
|
16
|
+
storage: { label: '📦 Cloud Storage', pkg: '@react-native-firebase/storage' },
|
|
17
|
+
messaging: { label: '📲 Cloud Messaging (FCM)', pkg: '@react-native-firebase/messaging' },
|
|
18
|
+
analytics: { label: '📈 Analytics', pkg: '@react-native-firebase/analytics' },
|
|
19
|
+
crashlytics: { label: '💥 Crashlytics', pkg: '@react-native-firebase/crashlytics' },
|
|
20
|
+
database: { label: '⚡ Realtime Database', pkg: '@react-native-firebase/database' },
|
|
21
|
+
functions: { label: '☁️ Cloud Functions', pkg: '@react-native-firebase/functions' },
|
|
22
|
+
remote: { label: '🎛️ Remote Config', pkg: '@react-native-firebase/remote-config' },
|
|
23
|
+
perf: { label: '⏱️ Performance Monitoring', pkg: '@react-native-firebase/perf' },
|
|
24
|
+
};
|
|
25
|
+
async function enableCommand(feature) {
|
|
26
|
+
logger_1.logger.title('Enable Firebase Feature');
|
|
27
|
+
let selectedKey = feature;
|
|
28
|
+
// ── If no feature passed, show interactive menu ──────────────
|
|
29
|
+
if (!selectedKey) {
|
|
30
|
+
const choices = Object.entries(FEATURES).map(([key, val]) => ({
|
|
31
|
+
name: val.label,
|
|
32
|
+
value: key,
|
|
33
|
+
}));
|
|
34
|
+
// Allow selecting multiple features at once
|
|
35
|
+
const { selected } = await inquirer_1.default.prompt([
|
|
36
|
+
{
|
|
37
|
+
type: 'checkbox',
|
|
38
|
+
name: 'selected',
|
|
39
|
+
message: 'Select Firebase features to enable (Space to select, Enter to confirm):',
|
|
40
|
+
choices,
|
|
41
|
+
validate: (val) => val.length > 0 ? true : 'Please select at least one feature',
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
44
|
+
// Install all selected features
|
|
45
|
+
for (const key of selected) {
|
|
46
|
+
await installFeature(key);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// ── If feature passed directly (e.g. firebase enable auth) ───
|
|
51
|
+
if (!FEATURES[selectedKey]) {
|
|
52
|
+
logger_1.logger.error(`Unknown feature: "${selectedKey}"`);
|
|
53
|
+
logger_1.logger.info(`Available features: ${Object.keys(FEATURES).join(', ')}`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
await installFeature(selectedKey);
|
|
57
|
+
}
|
|
58
|
+
async function installFeature(key) {
|
|
59
|
+
const feature = FEATURES[key];
|
|
60
|
+
logger_1.logger.step(`Installing ${feature.label}...`);
|
|
61
|
+
logger_1.logger.info(`Package: ${feature.pkg}`);
|
|
62
|
+
// Step 1: upgrade the core package to the latest version first so it
|
|
63
|
+
// satisfies any peer dep the feature package requires.
|
|
64
|
+
logger_1.logger.info(`Upgrading ${CORE_PACKAGE} to latest...`);
|
|
65
|
+
(0, runner_1.runLive)('npm', ['install', `${CORE_PACKAGE}@latest`]);
|
|
66
|
+
// Step 2: now install the feature package against the upgraded core.
|
|
67
|
+
logger_1.logger.info(`Installing ${feature.pkg}...`);
|
|
68
|
+
(0, runner_1.runLive)('npm', ['install', feature.pkg]);
|
|
69
|
+
logger_1.logger.success(`${feature.label} installed!`);
|
|
70
|
+
logger_1.logger.info(`Docs: https://rnfirebase.io/${key === 'auth' ? 'auth' : key}`);
|
|
71
|
+
console.log('');
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=enable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enable.js","sourceRoot":"","sources":["../../src/commands/enable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAkHlD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loginCommand = loginCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const runner_1 = require("../utils/runner");
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
async function loginCommand() {
|
|
11
|
+
logger_1.logger.title('Firebase Account Manager');
|
|
12
|
+
// ── Get current logged-in accounts ──────────────────────────
|
|
13
|
+
logger_1.logger.step('Fetching logged-in Firebase accounts...');
|
|
14
|
+
const accountsRaw = (0, runner_1.runSilent)('firebase', ['login:list']);
|
|
15
|
+
// Parse emails from output
|
|
16
|
+
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
|
|
17
|
+
const accounts = accountsRaw.match(emailRegex) ?? [];
|
|
18
|
+
if (accounts.length > 0) {
|
|
19
|
+
logger_1.logger.info('Currently logged-in accounts:');
|
|
20
|
+
accounts.forEach((acc, i) => console.log(` ${i + 1}. ${acc}`));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
logger_1.logger.warn('No accounts logged in yet.');
|
|
24
|
+
}
|
|
25
|
+
console.log('');
|
|
26
|
+
// ── Ask what the user wants to do (loop until cancel) ──────
|
|
27
|
+
let continueMenu = true;
|
|
28
|
+
let currentAccounts = accounts;
|
|
29
|
+
while (continueMenu) {
|
|
30
|
+
const { action } = await inquirer_1.default.prompt([
|
|
31
|
+
{
|
|
32
|
+
type: 'list',
|
|
33
|
+
name: 'action',
|
|
34
|
+
message: 'What do you want to do?',
|
|
35
|
+
choices: [
|
|
36
|
+
{ name: '🔑 Login with a new Google account', value: 'login' },
|
|
37
|
+
{ name: '🔄 Switch to a different account', value: 'switch' },
|
|
38
|
+
{ name: '📋 List all logged-in accounts', value: 'list' },
|
|
39
|
+
{ name: '🚪 Logout from current account', value: 'logout' },
|
|
40
|
+
{ name: '⬅️ Continue to next step', value: 'cancel' },
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
44
|
+
if (action === 'cancel') {
|
|
45
|
+
continueMenu = false;
|
|
46
|
+
}
|
|
47
|
+
// ── Login ────────────────────────────────────────────────────
|
|
48
|
+
else if (action === 'login') {
|
|
49
|
+
logger_1.logger.info('Opening browser to add a new Google account...');
|
|
50
|
+
(0, runner_1.runLive)('firebase', ['login:add']);
|
|
51
|
+
logger_1.logger.success('Account added!');
|
|
52
|
+
// Refresh account list after login
|
|
53
|
+
const refreshed = (0, runner_1.runSilent)('firebase', ['login:list']);
|
|
54
|
+
currentAccounts = refreshed.match(emailRegex) ?? [];
|
|
55
|
+
if (currentAccounts.length > 0) {
|
|
56
|
+
logger_1.logger.info('Logged-in accounts:');
|
|
57
|
+
currentAccounts.forEach((acc, i) => console.log(` ${i + 1}. ${acc}`));
|
|
58
|
+
console.log('');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// ── Switch account ───────────────────────────────────────────
|
|
62
|
+
else if (action === 'switch') {
|
|
63
|
+
if (currentAccounts.length === 0) {
|
|
64
|
+
logger_1.logger.error('No accounts found. Use "Login with a new Google account" to add one.');
|
|
65
|
+
}
|
|
66
|
+
else if (currentAccounts.length === 1) {
|
|
67
|
+
logger_1.logger.warn(`Only one account is registered: ${currentAccounts[0]}`);
|
|
68
|
+
logger_1.logger.info('Use "🔑 Login with a new Google account" to add more accounts first.');
|
|
69
|
+
console.log('');
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const { selectedAccount } = await inquirer_1.default.prompt([
|
|
73
|
+
{
|
|
74
|
+
type: 'list',
|
|
75
|
+
name: 'selectedAccount',
|
|
76
|
+
message: 'Select the account to switch to:',
|
|
77
|
+
choices: currentAccounts,
|
|
78
|
+
},
|
|
79
|
+
]);
|
|
80
|
+
(0, runner_1.runLive)('firebase', ['login:use', selectedAccount]);
|
|
81
|
+
logger_1.logger.success(`Switched to: ${selectedAccount}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ── List accounts ─────────────────────────────────────────────
|
|
85
|
+
else if (action === 'list') {
|
|
86
|
+
const refreshed = (0, runner_1.runSilent)('firebase', ['login:list']);
|
|
87
|
+
currentAccounts = refreshed.match(emailRegex) ?? [];
|
|
88
|
+
if (currentAccounts.length > 0) {
|
|
89
|
+
logger_1.logger.info('All logged-in accounts:');
|
|
90
|
+
currentAccounts.forEach((acc, i) => console.log(` ${i + 1}. ${acc}`));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
logger_1.logger.warn('No accounts are currently logged in.');
|
|
94
|
+
}
|
|
95
|
+
console.log('');
|
|
96
|
+
}
|
|
97
|
+
// ── Logout ───────────────────────────────────────────────────
|
|
98
|
+
else if (action === 'logout') {
|
|
99
|
+
const { confirmLogout } = await inquirer_1.default.prompt([
|
|
100
|
+
{
|
|
101
|
+
type: 'confirm',
|
|
102
|
+
name: 'confirmLogout',
|
|
103
|
+
message: 'Are you sure you want to logout?',
|
|
104
|
+
default: false,
|
|
105
|
+
},
|
|
106
|
+
]);
|
|
107
|
+
if (confirmLogout) {
|
|
108
|
+
(0, runner_1.runLive)('firebase', ['logout']);
|
|
109
|
+
logger_1.logger.success('Logged out successfully!');
|
|
110
|
+
// Refresh after logout
|
|
111
|
+
const refreshed = (0, runner_1.runSilent)('firebase', ['login:list']);
|
|
112
|
+
currentAccounts = refreshed.match(emailRegex) ?? [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AA8HA,wBAAsB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0L/D"}
|