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,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.setupCommand = setupCommand;
|
|
40
|
+
const fs_1 = require("fs");
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
43
|
+
const ora_1 = __importDefault(require("ora"));
|
|
44
|
+
const checker_1 = require("../utils/checker");
|
|
45
|
+
const login_1 = require("./login");
|
|
46
|
+
const sha_1 = require("./sha");
|
|
47
|
+
const enable_1 = require("./enable");
|
|
48
|
+
const runner_1 = require("../utils/runner");
|
|
49
|
+
const logger_1 = require("../utils/logger");
|
|
50
|
+
function parseFirebaseResult(output, label) {
|
|
51
|
+
try {
|
|
52
|
+
const parsed = JSON.parse(output);
|
|
53
|
+
if (parsed.result === undefined) {
|
|
54
|
+
throw new Error('Missing result field');
|
|
55
|
+
}
|
|
56
|
+
return parsed.result;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
throw new Error(`Could not parse Firebase ${label} output.`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function getAndroidConfigPath(cwd) {
|
|
63
|
+
const androidAppDir = path.join(cwd, 'android', 'app');
|
|
64
|
+
return (0, fs_1.existsSync)(androidAppDir)
|
|
65
|
+
? path.join(androidAppDir, 'google-services.json')
|
|
66
|
+
: path.join(cwd, 'google-services.json');
|
|
67
|
+
}
|
|
68
|
+
function getIosConfigPath(cwd) {
|
|
69
|
+
const iosDir = path.join(cwd, 'ios');
|
|
70
|
+
if (!(0, fs_1.existsSync)(iosDir)) {
|
|
71
|
+
return path.join(cwd, 'GoogleService-Info.plist');
|
|
72
|
+
}
|
|
73
|
+
const xcodeProject = (0, fs_1.readdirSync)(iosDir).find((entry) => entry.endsWith('.xcodeproj'));
|
|
74
|
+
if (xcodeProject) {
|
|
75
|
+
const appDir = path.join(iosDir, path.basename(xcodeProject, '.xcodeproj'));
|
|
76
|
+
if ((0, fs_1.existsSync)(appDir)) {
|
|
77
|
+
return path.join(appDir, 'GoogleService-Info.plist');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return path.join(iosDir, 'GoogleService-Info.plist');
|
|
81
|
+
}
|
|
82
|
+
function validateMobileIdentifier(value) {
|
|
83
|
+
return /^[A-Za-z][A-Za-z0-9_]*(\.[A-Za-z][A-Za-z0-9_]*)+$/.test(value.trim())
|
|
84
|
+
? true
|
|
85
|
+
: 'Enter a valid identifier like com.example.app';
|
|
86
|
+
}
|
|
87
|
+
function listFirebaseProjects() {
|
|
88
|
+
const output = (0, runner_1.runCheckedOutput)('firebase', ['projects:list', '--json']);
|
|
89
|
+
return parseFirebaseResult(output, 'project list');
|
|
90
|
+
}
|
|
91
|
+
function listFirebaseApps(platform, projectId) {
|
|
92
|
+
const output = (0, runner_1.runCheckedOutput)('firebase', ['apps:list', platform, '--project', projectId, '--json']);
|
|
93
|
+
return parseFirebaseResult(output, `${platform} app list`);
|
|
94
|
+
}
|
|
95
|
+
function ensureFirebaseApp(platform, projectId, displayName, identifier) {
|
|
96
|
+
const existingApps = listFirebaseApps(platform, projectId);
|
|
97
|
+
const match = existingApps.find((app) => platform === 'ANDROID' ? app.packageName === identifier : app.bundleId === identifier);
|
|
98
|
+
if (match) {
|
|
99
|
+
logger_1.logger.success(`${platform} app already exists: ${match.appId}`);
|
|
100
|
+
return match;
|
|
101
|
+
}
|
|
102
|
+
logger_1.logger.step(`Creating Firebase ${platform} app...`);
|
|
103
|
+
const identifierFlag = platform === 'ANDROID' ? '--package-name' : '--bundle-id';
|
|
104
|
+
const output = (0, runner_1.runCheckedOutput)('firebase', [
|
|
105
|
+
'apps:create',
|
|
106
|
+
platform,
|
|
107
|
+
displayName,
|
|
108
|
+
identifierFlag,
|
|
109
|
+
identifier,
|
|
110
|
+
'--project',
|
|
111
|
+
projectId,
|
|
112
|
+
'--json',
|
|
113
|
+
]);
|
|
114
|
+
return parseFirebaseResult(output, `${platform} app creation`);
|
|
115
|
+
}
|
|
116
|
+
function exportFirebaseConfig(platform, appId, outputPath) {
|
|
117
|
+
(0, fs_1.mkdirSync)(path.dirname(outputPath), { recursive: true });
|
|
118
|
+
logger_1.logger.step(`Writing ${path.basename(outputPath)}...`);
|
|
119
|
+
(0, runner_1.runLive)('firebase', ['apps:sdkconfig', platform, appId, '-o', outputPath]);
|
|
120
|
+
logger_1.logger.success(`Saved ${platform} config to ${outputPath}`);
|
|
121
|
+
}
|
|
122
|
+
async function setupCommand(full) {
|
|
123
|
+
logger_1.logger.title('FirePilot RN — Firebase Setup Wizard');
|
|
124
|
+
console.log('This wizard will set up Firebase for your React Native project.\n');
|
|
125
|
+
// ── STEP 1: Check & install all tools ───────────────────────
|
|
126
|
+
await (0, checker_1.checkAllTools)();
|
|
127
|
+
// ── STEP 2: Firebase login ───────────────────────────────────
|
|
128
|
+
logger_1.logger.step('STEP 2 — Firebase Login');
|
|
129
|
+
const { doLogin } = await inquirer_1.default.prompt([{
|
|
130
|
+
type: 'confirm',
|
|
131
|
+
name: 'doLogin',
|
|
132
|
+
message: 'Do you want to manage your Firebase login now?',
|
|
133
|
+
default: true,
|
|
134
|
+
}]);
|
|
135
|
+
if (doLogin)
|
|
136
|
+
await (0, login_1.loginCommand)();
|
|
137
|
+
// ── STEP 3: Create or select Firebase project ────────────────
|
|
138
|
+
logger_1.logger.step('STEP 3 — Firebase Project');
|
|
139
|
+
logger_1.logger.info('Fetching your existing Firebase projects...');
|
|
140
|
+
const existingProjects = listFirebaseProjects();
|
|
141
|
+
const { projectAction } = await inquirer_1.default.prompt([{
|
|
142
|
+
type: 'list',
|
|
143
|
+
name: 'projectAction',
|
|
144
|
+
message: 'What do you want to do?',
|
|
145
|
+
choices: [
|
|
146
|
+
{ name: '➕ Create a new Firebase project', value: 'create' },
|
|
147
|
+
{ name: '✅ Use an existing project', value: 'existing' },
|
|
148
|
+
],
|
|
149
|
+
}]);
|
|
150
|
+
let projectId = '';
|
|
151
|
+
if (projectAction === 'create') {
|
|
152
|
+
const { newProjectId } = await inquirer_1.default.prompt([{
|
|
153
|
+
type: 'input',
|
|
154
|
+
name: 'newProjectId',
|
|
155
|
+
message: 'Enter new Firebase project ID:',
|
|
156
|
+
validate: (val) => val.trim().length > 0 ? true : 'Project ID cannot be empty',
|
|
157
|
+
}]);
|
|
158
|
+
projectId = newProjectId.trim();
|
|
159
|
+
const spinner = (0, ora_1.default)(`Creating Firebase project: ${projectId}...`).start();
|
|
160
|
+
try {
|
|
161
|
+
(0, runner_1.runLive)('firebase', ['projects:create', projectId]);
|
|
162
|
+
spinner.succeed(`Project "${projectId}" created!`);
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
spinner.fail('Project creation failed!');
|
|
166
|
+
// ── Real-Time Diagnostics (like fire_pilot) ──────────────
|
|
167
|
+
if (e.message.includes('quota')) {
|
|
168
|
+
logger_1.logger.error('REASON: Firebase project quota exceeded.');
|
|
169
|
+
logger_1.logger.info('Fix: Delete old projects at https://console.firebase.google.com');
|
|
170
|
+
}
|
|
171
|
+
else if (e.message.includes('already exists')) {
|
|
172
|
+
logger_1.logger.error('REASON: A project with this ID already exists.');
|
|
173
|
+
logger_1.logger.info('Fix: Choose a different project ID.');
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
logger_1.logger.error('REASON: ' + e.message);
|
|
177
|
+
}
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
if (existingProjects.length === 0) {
|
|
183
|
+
logger_1.logger.error('No Firebase projects found for the current account.');
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
const { existingId } = await inquirer_1.default.prompt([{
|
|
187
|
+
type: 'list',
|
|
188
|
+
name: 'existingId',
|
|
189
|
+
message: 'Select the Firebase project to use:',
|
|
190
|
+
choices: existingProjects.map((project) => ({
|
|
191
|
+
name: `${project.displayName} (${project.projectId})`,
|
|
192
|
+
value: project.projectId,
|
|
193
|
+
})),
|
|
194
|
+
}]);
|
|
195
|
+
projectId = existingId;
|
|
196
|
+
}
|
|
197
|
+
// ── STEP 4: Install @react-native-firebase/app ───────────────
|
|
198
|
+
logger_1.logger.step('STEP 4 — Install React Native Firebase Core');
|
|
199
|
+
const spinner2 = (0, ora_1.default)('Installing @react-native-firebase/app...').start();
|
|
200
|
+
try {
|
|
201
|
+
(0, runner_1.runLive)('npm', ['install', '@react-native-firebase/app']);
|
|
202
|
+
spinner2.succeed('@react-native-firebase/app installed!');
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
spinner2.fail('Installation failed. Run manually: npm install @react-native-firebase/app');
|
|
206
|
+
}
|
|
207
|
+
// ── STEP 5: Create apps and download config files ───────────
|
|
208
|
+
logger_1.logger.step('STEP 5 — Firebase App Setup');
|
|
209
|
+
const defaultDisplayName = path.basename(process.cwd());
|
|
210
|
+
const { platforms, appDisplayName, androidPackageName, iosBundleId } = await inquirer_1.default.prompt([
|
|
211
|
+
{
|
|
212
|
+
type: 'checkbox',
|
|
213
|
+
name: 'platforms',
|
|
214
|
+
message: 'Create or configure Firebase apps for:',
|
|
215
|
+
choices: [
|
|
216
|
+
{ name: 'Android', value: 'ANDROID', checked: true },
|
|
217
|
+
{ name: 'iOS', value: 'IOS', checked: true },
|
|
218
|
+
],
|
|
219
|
+
validate: (selected) => selected.length > 0 ? true : 'Select at least one platform',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
type: 'input',
|
|
223
|
+
name: 'appDisplayName',
|
|
224
|
+
message: 'Enter the Firebase app display name:',
|
|
225
|
+
default: defaultDisplayName,
|
|
226
|
+
validate: (value) => value.trim().length > 0 ? true : 'Display name cannot be empty',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
type: 'input',
|
|
230
|
+
name: 'androidPackageName',
|
|
231
|
+
message: 'Enter the Android package name:',
|
|
232
|
+
when: (answers) => answers.platforms.includes('ANDROID'),
|
|
233
|
+
validate: validateMobileIdentifier,
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
type: 'input',
|
|
237
|
+
name: 'iosBundleId',
|
|
238
|
+
message: 'Enter the iOS bundle identifier:',
|
|
239
|
+
when: (answers) => answers.platforms.includes('IOS'),
|
|
240
|
+
validate: validateMobileIdentifier,
|
|
241
|
+
},
|
|
242
|
+
]);
|
|
243
|
+
let androidAppId;
|
|
244
|
+
if (platforms.includes('ANDROID')) {
|
|
245
|
+
if (!androidPackageName) {
|
|
246
|
+
logger_1.logger.error('Android package name is required to create or configure the Android app.');
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
const androidApp = ensureFirebaseApp('ANDROID', projectId, appDisplayName.trim(), androidPackageName.trim());
|
|
250
|
+
androidAppId = androidApp.appId;
|
|
251
|
+
exportFirebaseConfig('ANDROID', androidAppId, getAndroidConfigPath(process.cwd()));
|
|
252
|
+
}
|
|
253
|
+
if (platforms.includes('IOS')) {
|
|
254
|
+
if (!iosBundleId) {
|
|
255
|
+
logger_1.logger.error('iOS bundle identifier is required to create or configure the iOS app.');
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
const iosApp = ensureFirebaseApp('IOS', projectId, appDisplayName.trim(), iosBundleId.trim());
|
|
259
|
+
exportFirebaseConfig('IOS', iosApp.appId, getIosConfigPath(process.cwd()));
|
|
260
|
+
}
|
|
261
|
+
// ── STEP 6: SHA keys (only if --full) ───────────────────────
|
|
262
|
+
if (full) {
|
|
263
|
+
logger_1.logger.step('STEP 6 — SHA Key Registration');
|
|
264
|
+
const { doSha } = await inquirer_1.default.prompt([{
|
|
265
|
+
type: 'confirm',
|
|
266
|
+
name: 'doSha',
|
|
267
|
+
message: 'Do you want to register Android SHA keys now?',
|
|
268
|
+
default: true,
|
|
269
|
+
}]);
|
|
270
|
+
if (doSha && androidAppId) {
|
|
271
|
+
await (0, sha_1.shaCommand)({ projectId, appId: androidAppId });
|
|
272
|
+
}
|
|
273
|
+
else if (doSha) {
|
|
274
|
+
logger_1.logger.warn('Skipping SHA registration because no Android app was configured in this run.');
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// ── STEP 7: Enable Firebase features ────────────────────────
|
|
278
|
+
logger_1.logger.step('STEP 7 — Enable Firebase Features');
|
|
279
|
+
const { doFeatures } = await inquirer_1.default.prompt([{
|
|
280
|
+
type: 'confirm',
|
|
281
|
+
name: 'doFeatures',
|
|
282
|
+
message: 'Do you want to install additional Firebase features (Auth, Firestore, etc)?',
|
|
283
|
+
default: true,
|
|
284
|
+
}]);
|
|
285
|
+
if (doFeatures)
|
|
286
|
+
await (0, enable_1.enableCommand)();
|
|
287
|
+
// ── DONE ─────────────────────────────────────────────────────
|
|
288
|
+
console.log('\n' + '─'.repeat(60));
|
|
289
|
+
logger_1.logger.success('🎉 Firebase setup complete for your React Native project!');
|
|
290
|
+
console.log('─'.repeat(60));
|
|
291
|
+
logger_1.logger.info('Next steps:');
|
|
292
|
+
console.log(' 1. Verify google-services.json and GoogleService-Info.plist were written to your project');
|
|
293
|
+
console.log(' 2. Follow platform setup at https://rnfirebase.io');
|
|
294
|
+
console.log(' 3. Run your app: npx react-native run-android');
|
|
295
|
+
console.log('─'.repeat(60) + '\n');
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sha.d.ts","sourceRoot":"","sources":["../../src/commands/sha.ts"],"names":[],"mappings":"AA4BA,KAAK,iBAAiB,GAAG;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAUF,wBAAsB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuI/E"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.shaCommand = shaCommand;
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
43
|
+
const runner_1 = require("../utils/runner");
|
|
44
|
+
const logger_1 = require("../utils/logger");
|
|
45
|
+
function parseFirebaseJson(output, label) {
|
|
46
|
+
try {
|
|
47
|
+
const parsed = JSON.parse(output);
|
|
48
|
+
return parsed.result ?? [];
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
logger_1.logger.error(`Could not parse Firebase ${label} output.`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function shaCommand(options = {}) {
|
|
56
|
+
logger_1.logger.title('SHA Key Registration');
|
|
57
|
+
// ── Check keytool exists ─────────────────────────────────────
|
|
58
|
+
const keytoolPath = (0, runner_1.resolveJavaTool)('keytool');
|
|
59
|
+
if (!keytoolPath) {
|
|
60
|
+
logger_1.logger.error('Java keytool not found!');
|
|
61
|
+
logger_1.logger.info('Install Java from: https://adoptium.net');
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
// ── Find the Android debug keystore ─────────────────────────
|
|
65
|
+
const keystorePath = path.join(os.homedir(), '.android', 'debug.keystore');
|
|
66
|
+
logger_1.logger.info(`Looking for keystore at: ${keystorePath}`);
|
|
67
|
+
// ── Extract SHA keys ─────────────────────────────────────────
|
|
68
|
+
logger_1.logger.step('Extracting SHA-1 and SHA-256 from debug keystore...');
|
|
69
|
+
const output = (0, runner_1.runSilent)(keytoolPath, [
|
|
70
|
+
'-list', '-v',
|
|
71
|
+
'-keystore', keystorePath,
|
|
72
|
+
'-alias', 'androiddebugkey',
|
|
73
|
+
'-storepass', 'android',
|
|
74
|
+
'-keypass', 'android',
|
|
75
|
+
]);
|
|
76
|
+
if (!output) {
|
|
77
|
+
logger_1.logger.error('Could not read keystore. Make sure you have run your React Native Android app at least once.');
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
// ── Parse SHA-1 and SHA-256 ──────────────────────────────────
|
|
81
|
+
const sha1Match = output.match(/SHA1:\s+([A-F0-9:]+)/i);
|
|
82
|
+
const sha256Match = output.match(/SHA256:\s+([A-F0-9:]+)/i);
|
|
83
|
+
if (!sha1Match || !sha256Match) {
|
|
84
|
+
logger_1.logger.error('SHA keys not found in keystore output.');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const sha1 = sha1Match[1].trim();
|
|
88
|
+
const sha256 = sha256Match[1].trim();
|
|
89
|
+
logger_1.logger.success(`SHA-1: ${sha1}`);
|
|
90
|
+
logger_1.logger.success(`SHA-256: ${sha256}`);
|
|
91
|
+
let projectId = options.projectId;
|
|
92
|
+
if (!projectId) {
|
|
93
|
+
logger_1.logger.step('Fetching your Firebase projects...');
|
|
94
|
+
const projectOutput = (0, runner_1.runSilent)('firebase', ['projects:list', '--json']);
|
|
95
|
+
const projects = parseFirebaseJson(projectOutput, 'project list');
|
|
96
|
+
if (projects.length === 0) {
|
|
97
|
+
logger_1.logger.error('No Firebase projects found for the current account.');
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
const projectAnswer = await inquirer_1.default.prompt([
|
|
101
|
+
{
|
|
102
|
+
type: 'list',
|
|
103
|
+
name: 'projectId',
|
|
104
|
+
message: 'Select your Firebase project:',
|
|
105
|
+
choices: projects.map((project) => ({
|
|
106
|
+
name: `${project.displayName} (${project.projectId})`,
|
|
107
|
+
value: project.projectId,
|
|
108
|
+
})),
|
|
109
|
+
},
|
|
110
|
+
]);
|
|
111
|
+
projectId = projectAnswer.projectId;
|
|
112
|
+
}
|
|
113
|
+
if (!projectId) {
|
|
114
|
+
logger_1.logger.error('Firebase project selection failed.');
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
const selectedProjectId = projectId;
|
|
118
|
+
// ── Show Android apps for the chosen project ─────────────────
|
|
119
|
+
let appId = options.appId;
|
|
120
|
+
if (!appId) {
|
|
121
|
+
logger_1.logger.step('Fetching Android apps for the selected Firebase project...');
|
|
122
|
+
const appsOutput = (0, runner_1.runSilent)('firebase', ['apps:list', 'ANDROID', '--project', selectedProjectId, '--json']);
|
|
123
|
+
const androidApps = parseFirebaseJson(appsOutput, 'Android app list');
|
|
124
|
+
if (androidApps.length === 0) {
|
|
125
|
+
logger_1.logger.error(`No Android apps found in Firebase project ${selectedProjectId}.`);
|
|
126
|
+
logger_1.logger.info('Create an Android app in Firebase Console first, then rerun this command.');
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
const appAnswer = await inquirer_1.default.prompt([
|
|
130
|
+
{
|
|
131
|
+
type: 'list',
|
|
132
|
+
name: 'appId',
|
|
133
|
+
message: 'Select your Firebase Android app:',
|
|
134
|
+
choices: androidApps.map((app) => ({
|
|
135
|
+
name: `${app.displayName || 'Unnamed Android App'}${app.packageName ? ` (${app.packageName})` : ''} [${app.appId}]`,
|
|
136
|
+
value: app.appId,
|
|
137
|
+
})),
|
|
138
|
+
},
|
|
139
|
+
]);
|
|
140
|
+
appId = appAnswer.appId;
|
|
141
|
+
}
|
|
142
|
+
if (!appId) {
|
|
143
|
+
logger_1.logger.error('Firebase Android app selection failed.');
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
const selectedAppId = appId;
|
|
147
|
+
// ── Register SHA keys ────────────────────────────────────────
|
|
148
|
+
logger_1.logger.step('Registering SHA-1 key with Firebase...');
|
|
149
|
+
(0, runner_1.runLive)('firebase', [
|
|
150
|
+
'apps:android:sha:create',
|
|
151
|
+
'--project', selectedProjectId,
|
|
152
|
+
selectedAppId,
|
|
153
|
+
sha1,
|
|
154
|
+
]);
|
|
155
|
+
logger_1.logger.step('Registering SHA-256 key with Firebase...');
|
|
156
|
+
(0, runner_1.runLive)('firebase', [
|
|
157
|
+
'apps:android:sha:create',
|
|
158
|
+
'--project', selectedProjectId,
|
|
159
|
+
selectedAppId,
|
|
160
|
+
sha256,
|
|
161
|
+
]);
|
|
162
|
+
logger_1.logger.success('Both SHA keys registered successfully!');
|
|
163
|
+
logger_1.logger.info('Go to Firebase Console → Project Settings → Your Android App to verify.');
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=sha.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sha.js","sourceRoot":"","sources":["../../src/commands/sha.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const setup_1 = require("./commands/setup");
|
|
6
|
+
const login_1 = require("./commands/login");
|
|
7
|
+
const sha_1 = require("./commands/sha");
|
|
8
|
+
const enable_1 = require("./commands/enable");
|
|
9
|
+
const program = new commander_1.Command();
|
|
10
|
+
program
|
|
11
|
+
.name('fire-pilot-rn')
|
|
12
|
+
.description('🔥 Elite Firebase setup orchestrator for React Native')
|
|
13
|
+
.version('1.0.0');
|
|
14
|
+
// ── Parent command: firebase ─────────────────────────────────
|
|
15
|
+
const firebase = program.command('firebase');
|
|
16
|
+
// firebase setup --full
|
|
17
|
+
firebase
|
|
18
|
+
.command('setup')
|
|
19
|
+
.description('The complete Pilot experience: Tools → Login → Project → Deps → SHA')
|
|
20
|
+
.option('--full', 'Run the complete setup including SHA key registration')
|
|
21
|
+
.action((options) => {
|
|
22
|
+
(0, setup_1.setupCommand)(options.full ?? false).catch((err) => {
|
|
23
|
+
console.error('Error:', err.message);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
// firebase login
|
|
28
|
+
firebase
|
|
29
|
+
.command('login')
|
|
30
|
+
.description('Manage and switch between multiple Google accounts')
|
|
31
|
+
.action(() => {
|
|
32
|
+
(0, login_1.loginCommand)().catch((err) => {
|
|
33
|
+
console.error('Error:', err.message);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
// firebase sha add
|
|
38
|
+
firebase
|
|
39
|
+
.command('sha')
|
|
40
|
+
.command('add')
|
|
41
|
+
.description('Automatically extract and add SHA keys to your Firebase project')
|
|
42
|
+
.action(() => {
|
|
43
|
+
(0, sha_1.shaCommand)().catch((err) => {
|
|
44
|
+
console.error('Error:', err.message);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
// firebase enable <feature>
|
|
49
|
+
firebase
|
|
50
|
+
.command('enable [feature]')
|
|
51
|
+
.description('Quickly enable Firebase features (auth, firestore, storage, etc.)')
|
|
52
|
+
.action((feature) => {
|
|
53
|
+
(0, enable_1.enableCommand)(feature).catch((err) => {
|
|
54
|
+
console.error('Error:', err.message);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
program.parse(process.argv);
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAiD;AACjD,4CAAiD;AACjD,wCAA+C;AAC/C,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gEAAgE;AAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE7C,wBAAwB;AACxB,QAAQ;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,QAAQ,EAAE,uDAAuD,CAAC;KACzE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,IAAA,oBAAY,EAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAChD,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,iBAAiB;AACjB,QAAQ;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,GAAG,EAAE;IACX,IAAA,oBAAY,GAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,QAAQ;KACL,OAAO,CAAC,KAAK,CAAC;KACd,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,GAAG,EAAE;IACX,IAAA,gBAAU,GAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,QAAQ;KACL,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE;IAC3B,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../src/utils/checker.ts"],"names":[],"mappings":"AA8DA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAOnD"}
|