@ahmedsamirelsaka/react-native-local-release 2.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/CREDENTIALS.md +79 -0
  3. package/LICENSE +21 -0
  4. package/README.md +112 -0
  5. package/SECURITY.md +44 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +326 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +27 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +229 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/credentials.d.ts +27 -0
  15. package/dist/credentials.d.ts.map +1 -0
  16. package/dist/credentials.js +317 -0
  17. package/dist/credentials.js.map +1 -0
  18. package/dist/detect.d.ts +7 -0
  19. package/dist/detect.d.ts.map +1 -0
  20. package/dist/detect.js +326 -0
  21. package/dist/detect.js.map +1 -0
  22. package/dist/fs.d.ts +15 -0
  23. package/dist/fs.d.ts.map +1 -0
  24. package/dist/fs.js +79 -0
  25. package/dist/fs.js.map +1 -0
  26. package/dist/index.d.ts +7 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +6 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/install.d.ts +5 -0
  31. package/dist/install.d.ts.map +1 -0
  32. package/dist/install.js +338 -0
  33. package/dist/install.js.map +1 -0
  34. package/dist/logging.d.ts +15 -0
  35. package/dist/logging.d.ts.map +1 -0
  36. package/dist/logging.js +84 -0
  37. package/dist/logging.js.map +1 -0
  38. package/dist/patch.d.ts +39 -0
  39. package/dist/patch.d.ts.map +1 -0
  40. package/dist/patch.js +352 -0
  41. package/dist/patch.js.map +1 -0
  42. package/dist/paths.d.ts +14 -0
  43. package/dist/paths.d.ts.map +1 -0
  44. package/dist/paths.js +65 -0
  45. package/dist/paths.js.map +1 -0
  46. package/dist/process.d.ts +26 -0
  47. package/dist/process.d.ts.map +1 -0
  48. package/dist/process.js +43 -0
  49. package/dist/process.js.map +1 -0
  50. package/dist/prompt.d.ts +9 -0
  51. package/dist/prompt.d.ts.map +1 -0
  52. package/dist/prompt.js +70 -0
  53. package/dist/prompt.js.map +1 -0
  54. package/dist/types.d.ts +153 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +2 -0
  57. package/dist/types.js.map +1 -0
  58. package/docs/ARCHITECTURE.md +25 -0
  59. package/docs/MIGRATION.md +28 -0
  60. package/docs/PUBLISHING.md +128 -0
  61. package/docs/SUPPORT.md +17 -0
  62. package/install.mjs +6 -0
  63. package/package.json +73 -0
  64. package/schema/release.config.schema.json +209 -0
  65. package/template/android/keystore.properties.example +7 -0
  66. package/template/android/proguard-rules.rn-local-release.pro +28 -0
  67. package/template/docs/LOCAL_RELEASE.md +85 -0
  68. package/template/fastlane/.env.example +20 -0
  69. package/template/fastlane/Appfile +10 -0
  70. package/template/fastlane/Fastfile +203 -0
  71. package/template/fastlane/lib/rn_local_release.rb +700 -0
  72. package/template/ios/exportOptions.plist +18 -0
  73. package/template/scripts/print-android-signing-fingerprints.sh +62 -0
  74. package/template/secrets/.gitignore +3 -0
  75. package/template/secrets/README.md +12 -0
package/dist/config.js ADDED
@@ -0,0 +1,229 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { exists, readText } from './fs.js';
4
+ import { assertSafeRelativePath, assertSemver, assertTeamId, assertBundleId } from './paths.js';
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
+ export const SCHEMA_VERSION = 2;
7
+ function typeOf(value) {
8
+ if (value === null)
9
+ return 'null';
10
+ if (Array.isArray(value))
11
+ return 'array';
12
+ if (typeof value === 'number' && Number.isInteger(value))
13
+ return 'integer';
14
+ return typeof value;
15
+ }
16
+ function matchesType(actual, allowed) {
17
+ if (allowed.includes(actual))
18
+ return true;
19
+ if (actual === 'integer' && allowed.includes('number'))
20
+ return true;
21
+ return false;
22
+ }
23
+ function validateAgainstSchema(value, schema, pathLabel = '$') {
24
+ const errors = [];
25
+ if (schema.type) {
26
+ const allowed = Array.isArray(schema.type) ? schema.type : [schema.type];
27
+ const actual = typeOf(value);
28
+ if (!matchesType(actual, allowed) &&
29
+ !(actual === 'number' && allowed.includes('integer') && Number.isInteger(value))) {
30
+ errors.push(`${pathLabel}: expected ${allowed.join('|')}, got ${actual}`);
31
+ return errors;
32
+ }
33
+ }
34
+ if (schema.enum && !schema.enum.includes(value)) {
35
+ errors.push(`${pathLabel}: value must be one of ${schema.enum.join(', ')}`);
36
+ }
37
+ if (schema.minLength != null && typeof value === 'string' && value.length < schema.minLength) {
38
+ errors.push(`${pathLabel}: string too short`);
39
+ }
40
+ if (schema.minimum != null && typeof value === 'number' && value < schema.minimum) {
41
+ errors.push(`${pathLabel}: number below minimum ${schema.minimum}`);
42
+ }
43
+ if (schema.minItems != null && Array.isArray(value) && value.length < schema.minItems) {
44
+ errors.push(`${pathLabel}: array too short`);
45
+ }
46
+ if (schema.type === 'object' && value && typeof value === 'object') {
47
+ const obj = value;
48
+ for (const key of schema.required || []) {
49
+ if (!(key in obj))
50
+ errors.push(`${pathLabel}: missing required property "${key}"`);
51
+ }
52
+ if (schema.additionalProperties === false) {
53
+ for (const key of Object.keys(obj)) {
54
+ if (!schema.properties || !(key in schema.properties)) {
55
+ errors.push(`${pathLabel}: unexpected property "${key}"`);
56
+ }
57
+ }
58
+ }
59
+ for (const [key, childSchema] of Object.entries(schema.properties || {})) {
60
+ if (key in obj) {
61
+ errors.push(...validateAgainstSchema(obj[key], childSchema, `${pathLabel}.${key}`));
62
+ }
63
+ }
64
+ }
65
+ if (schema.type === 'array' && Array.isArray(value) && schema.items) {
66
+ value.forEach((item, index) => {
67
+ errors.push(...validateAgainstSchema(item, schema.items, `${pathLabel}[${index}]`));
68
+ });
69
+ }
70
+ return errors;
71
+ }
72
+ export function loadSchema() {
73
+ const schemaPath = path.join(__dirname, '..', 'schema', 'release.config.schema.json');
74
+ return JSON.parse(readText(schemaPath));
75
+ }
76
+ export function validateReleaseConfig(config) {
77
+ const errors = validateAgainstSchema(config, loadSchema());
78
+ if (!config || typeof config !== 'object') {
79
+ return errors;
80
+ }
81
+ const cfg = config;
82
+ if (cfg.ios?.buildNumberStrategy?.mode === 'fixed') {
83
+ if (!('value' in cfg.ios.buildNumberStrategy) || !cfg.ios.buildNumberStrategy.value) {
84
+ errors.push('$.ios.buildNumberStrategy: fixed mode requires value >= 1');
85
+ }
86
+ }
87
+ try {
88
+ if (cfg.ios?.teamId)
89
+ assertTeamId(cfg.ios.teamId);
90
+ }
91
+ catch (error) {
92
+ errors.push(`$.ios.teamId: ${error.message}`);
93
+ }
94
+ try {
95
+ if (cfg.app?.packageName)
96
+ assertBundleId(cfg.app.packageName);
97
+ }
98
+ catch (error) {
99
+ errors.push(`$.app.packageName: ${error.message}`);
100
+ }
101
+ try {
102
+ if (cfg.app?.bundleIdentifier)
103
+ assertBundleId(cfg.app.bundleIdentifier);
104
+ }
105
+ catch (error) {
106
+ errors.push(`$.app.bundleIdentifier: ${error.message}`);
107
+ }
108
+ for (const source of cfg.version?.sources || []) {
109
+ try {
110
+ assertSafeRelativePath(source.path);
111
+ }
112
+ catch (error) {
113
+ errors.push(`version.source ${source.path}: ${error.message}`);
114
+ }
115
+ }
116
+ return errors;
117
+ }
118
+ export function assertValidReleaseConfig(config) {
119
+ const errors = validateReleaseConfig(config);
120
+ if (errors.length > 0) {
121
+ throw new Error(`Invalid release.config.json:\n- ${errors.join('\n- ')}`);
122
+ }
123
+ }
124
+ export function loadReleaseConfig(root) {
125
+ const configPath = path.join(root, 'fastlane', 'release.config.json');
126
+ if (!exists(configPath)) {
127
+ throw new Error(`Missing ${configPath}`);
128
+ }
129
+ const config = JSON.parse(readText(configPath));
130
+ const migrated = migrateConfig(config);
131
+ assertValidReleaseConfig(migrated);
132
+ return { config: migrated, configPath };
133
+ }
134
+ export function migrateConfig(raw) {
135
+ if (!raw || typeof raw !== 'object') {
136
+ throw new Error('Config must be an object');
137
+ }
138
+ const input = raw;
139
+ const schemaVersion = Number(input.schemaVersion || 1);
140
+ let next = { ...input };
141
+ if (schemaVersion < 2) {
142
+ const ios = (next.ios || {});
143
+ const android = (next.android || {});
144
+ next = {
145
+ ...next,
146
+ schemaVersion: SCHEMA_VERSION,
147
+ ios: {
148
+ enabled: true,
149
+ exportOptionsPath: 'ios/exportOptions.plist',
150
+ ...ios,
151
+ },
152
+ android: {
153
+ enabled: true,
154
+ dsl: String(android.buildGradlePath || '').endsWith('.kts') ? 'kotlin' : 'groovy',
155
+ ...android,
156
+ },
157
+ credentials: next.credentials || {
158
+ provider: process.platform === 'darwin' ? 'keychain' : 'file',
159
+ },
160
+ logging: next.logging || { enabled: true, directory: 'logs' },
161
+ archives: next.archives || {
162
+ storeUploadedVersions: false,
163
+ directory: 'versions',
164
+ },
165
+ version: {
166
+ extraFiles: [],
167
+ ...(next.version || {}),
168
+ },
169
+ gates: {
170
+ requireCompileBeforeUpload: true,
171
+ ...(next.gates || {}),
172
+ },
173
+ };
174
+ }
175
+ return next;
176
+ }
177
+ export function deepMergeConfig(detected, existing) {
178
+ return {
179
+ ...detected,
180
+ ...existing,
181
+ schemaVersion: SCHEMA_VERSION,
182
+ app: { ...detected.app, ...existing.app },
183
+ ios: { ...detected.ios, ...existing.ios },
184
+ android: { ...detected.android, ...existing.android },
185
+ version: {
186
+ ...detected.version,
187
+ ...existing.version,
188
+ sources: existing.version.sources?.length
189
+ ? existing.version.sources
190
+ : detected.version.sources,
191
+ extraFiles: existing.version.extraFiles ?? detected.version.extraFiles,
192
+ },
193
+ verify: { ...detected.verify, ...existing.verify },
194
+ build: { ...detected.build, ...existing.build },
195
+ gates: { ...detected.gates, ...existing.gates },
196
+ credentials: { ...detected.credentials, ...existing.credentials },
197
+ logging: { ...detected.logging, ...existing.logging },
198
+ archives: { ...detected.archives, ...existing.archives },
199
+ ruby: { ...detected.ruby, ...existing.ruby },
200
+ };
201
+ }
202
+ export function validateProjectPaths(root, config) {
203
+ const missing = [];
204
+ const requiredPaths = [];
205
+ if (config.ios.enabled) {
206
+ requiredPaths.push(config.ios.workspace, config.ios.project, path.posix.join(config.ios.project, 'project.pbxproj'), config.ios.exportOptionsPath);
207
+ }
208
+ if (config.android.enabled) {
209
+ requiredPaths.push(config.android.buildGradlePath);
210
+ }
211
+ for (const relative of requiredPaths) {
212
+ if (!exists(path.join(root, relative)))
213
+ missing.push(relative);
214
+ }
215
+ for (const source of config.version.sources || []) {
216
+ if (!exists(path.join(root, source.path)))
217
+ missing.push(source.path);
218
+ }
219
+ for (const extra of config.version.extraFiles || []) {
220
+ if (!exists(path.join(root, extra.path)))
221
+ missing.push(extra.path);
222
+ }
223
+ return missing;
224
+ }
225
+ export function jsonPretty(value) {
226
+ return `${JSON.stringify(value, null, 2)}\n`;
227
+ }
228
+ export { assertSemver };
229
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { CredentialProviderKind } from './types.js';
2
+ import type readline from 'node:readline/promises';
3
+ export type CredentialValues = {
4
+ ASC_KEY_ID: string;
5
+ ASC_ISSUER_ID: string;
6
+ ASC_KEY_FILEPATH: string;
7
+ APPLE_ID: string;
8
+ PLAY_JSON_KEY_PATH: string;
9
+ MYAPP_UPLOAD_STORE_FILE: string;
10
+ MYAPP_UPLOAD_KEY_ALIAS: string;
11
+ MYAPP_UPLOAD_STORE_PASSWORD: string;
12
+ MYAPP_UPLOAD_KEY_PASSWORD: string;
13
+ };
14
+ export declare function defaultCredentialProvider(): CredentialProviderKind;
15
+ export declare function setupCredentialsInteractively(rl: readline.Interface, projectRoot: string, options?: {
16
+ dryRun?: boolean;
17
+ provider?: CredentialProviderKind;
18
+ allowExternalPaths?: boolean;
19
+ /** Test/CI hook — never used for production prompts by default. */
20
+ readSecret?: (question: string) => Promise<string>;
21
+ }): Promise<{
22
+ configured: boolean;
23
+ provider: CredentialProviderKind;
24
+ }>;
25
+ export declare function materializeKeychainPasswords(projectRoot: string): void;
26
+ export declare function purgeCredentials(projectRoot: string): void;
27
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,2BAA2B,EAAE,MAAM,CAAC;IACpC,yBAAyB,EAAE,MAAM,CAAC;CACnC,CAAC;AA0HF,wBAAgB,yBAAyB,IAAI,sBAAsB,CAElE;AAED,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,QAAQ,CAAC,SAAS,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/C,GACL,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,CAAC,CA2LpE;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAatE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAe1D"}
@@ -0,0 +1,317 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { spawnSync } from 'node:child_process';
5
+ import { assertOwnerOnlyReadable, copyFileSecure, ensureSecretDir, exists, isSymlink, writeSecretText, } from './fs.js';
6
+ import { rejectControlChars, resolveWithinRoot, toPosixRelative } from './paths.js';
7
+ import { ask, askSecret, askYesNo } from './prompt.js';
8
+ function escapeEnvValue(value) {
9
+ rejectControlChars(value, 'credential value');
10
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
11
+ }
12
+ function writeEnvFile(filePath, values) {
13
+ const lines = [
14
+ '# Generated by react-native-local-release. Never commit.',
15
+ `ASC_KEY_ID=${escapeEnvValue(values.ASC_KEY_ID)}`,
16
+ `ASC_ISSUER_ID=${escapeEnvValue(values.ASC_ISSUER_ID)}`,
17
+ `ASC_KEY_FILEPATH=${escapeEnvValue(values.ASC_KEY_FILEPATH)}`,
18
+ values.APPLE_ID ? `APPLE_ID=${escapeEnvValue(values.APPLE_ID)}` : '# APPLE_ID=',
19
+ `PLAY_JSON_KEY_PATH=${escapeEnvValue(values.PLAY_JSON_KEY_PATH)}`,
20
+ `MYAPP_UPLOAD_STORE_FILE=${escapeEnvValue(values.MYAPP_UPLOAD_STORE_FILE)}`,
21
+ `MYAPP_UPLOAD_KEY_ALIAS=${escapeEnvValue(values.MYAPP_UPLOAD_KEY_ALIAS)}`,
22
+ `MYAPP_UPLOAD_STORE_PASSWORD=${escapeEnvValue(values.MYAPP_UPLOAD_STORE_PASSWORD)}`,
23
+ `MYAPP_UPLOAD_KEY_PASSWORD=${escapeEnvValue(values.MYAPP_UPLOAD_KEY_PASSWORD)}`,
24
+ '',
25
+ ];
26
+ writeSecretText(filePath, lines.join('\n'));
27
+ }
28
+ function writeKeystoreProperties(filePath, values) {
29
+ const lines = [
30
+ '# Generated by react-native-local-release. Never commit.',
31
+ `MYAPP_UPLOAD_STORE_FILE=${values.MYAPP_UPLOAD_STORE_FILE}`,
32
+ `MYAPP_UPLOAD_KEY_ALIAS=${values.MYAPP_UPLOAD_KEY_ALIAS}`,
33
+ `MYAPP_UPLOAD_STORE_PASSWORD=${values.MYAPP_UPLOAD_STORE_PASSWORD}`,
34
+ `MYAPP_UPLOAD_KEY_PASSWORD=${values.MYAPP_UPLOAD_KEY_PASSWORD}`,
35
+ '',
36
+ ];
37
+ for (const value of Object.values(values)) {
38
+ rejectControlChars(value, 'keystore property');
39
+ }
40
+ writeSecretText(filePath, lines.join('\n'));
41
+ }
42
+ function vaultRoot() {
43
+ return path.join(os.homedir(), '.rn-local-release', 'vault');
44
+ }
45
+ function projectVaultDir(projectRoot) {
46
+ const slug = path.basename(path.resolve(projectRoot)).replace(/[^\w.-]+/g, '_');
47
+ return path.join(vaultRoot(), slug);
48
+ }
49
+ function keychainAvailable() {
50
+ if (process.platform !== 'darwin')
51
+ return false;
52
+ const result = spawnSync('security', ['help'], { encoding: 'utf8' });
53
+ return result.status === 0;
54
+ }
55
+ function keychainSet(service, account, secret) {
56
+ spawnSync('security', ['add-generic-password', '-U', '-s', service, '-a', account, '-w', secret], { encoding: 'utf8', stdio: 'ignore' });
57
+ }
58
+ function keychainGet(service, account) {
59
+ const result = spawnSync('security', ['find-generic-password', '-s', service, '-a', account, '-w'], { encoding: 'utf8' });
60
+ if (result.status !== 0)
61
+ return null;
62
+ return (result.stdout || '').trim() || null;
63
+ }
64
+ function keychainDelete(service, account) {
65
+ spawnSync('security', ['delete-generic-password', '-s', service, '-a', account], {
66
+ stdio: 'ignore',
67
+ });
68
+ }
69
+ function assertCredentialSource(projectRoot, sourcePath, allowExternal) {
70
+ if (isSymlink(sourcePath) || (exists(sourcePath) && isSymlink(sourcePath))) {
71
+ throw new Error(`Refusing symlink credential source: ${sourcePath}`);
72
+ }
73
+ const absolute = path.isAbsolute(sourcePath)
74
+ ? path.resolve(sourcePath)
75
+ : path.resolve(projectRoot, sourcePath);
76
+ if (!exists(absolute)) {
77
+ throw new Error(`Credential file not found: ${absolute}`);
78
+ }
79
+ if (!allowExternal) {
80
+ return resolveWithinRoot(projectRoot, sourcePath);
81
+ }
82
+ return fs.realpathSync(absolute);
83
+ }
84
+ function assertNotGitTracked(projectRoot, relativePath) {
85
+ const checkIgnore = spawnSync('git', ['check-ignore', '-q', relativePath], {
86
+ cwd: projectRoot,
87
+ encoding: 'utf8',
88
+ });
89
+ const lsFiles = spawnSync('git', ['ls-files', '--error-unmatch', relativePath], {
90
+ cwd: projectRoot,
91
+ encoding: 'utf8',
92
+ });
93
+ if (lsFiles.status === 0) {
94
+ throw new Error(`Refusing to write credentials: ${relativePath} is tracked by git. Untrack it first.`);
95
+ }
96
+ // If git repo and path is not ignored, warn by failing closed for secret dirs.
97
+ if (exists(path.join(projectRoot, '.git')) &&
98
+ checkIgnore.status !== 0 &&
99
+ (relativePath.startsWith('secrets/') ||
100
+ relativePath.includes('keystore.properties') ||
101
+ relativePath.includes('fastlane/.env'))) {
102
+ throw new Error(`Refusing to write credentials: ${relativePath} is not gitignored. Update .gitignore first.`);
103
+ }
104
+ }
105
+ export function defaultCredentialProvider() {
106
+ return keychainAvailable() ? 'keychain' : 'file';
107
+ }
108
+ export async function setupCredentialsInteractively(rl, projectRoot, options = {}) {
109
+ const readSecret = options.readSecret || askSecret;
110
+ const provider = options.provider || defaultCredentialProvider();
111
+ const allowExternal = options.allowExternalPaths === true;
112
+ console.log('');
113
+ console.log('Credential setup');
114
+ console.log('----------------');
115
+ console.log(`Provider: ${provider}`);
116
+ console.log('Passwords are hidden. Secrets are never printed after entry.');
117
+ console.log('');
118
+ const wantApple = await askYesNo(rl, 'Configure Apple App Store Connect API credentials?', true);
119
+ let apple = null;
120
+ if (wantApple) {
121
+ const keyId = await ask(rl, 'ASC Key ID');
122
+ const issuerId = await ask(rl, 'ASC Issuer ID');
123
+ const keyPath = await ask(rl, 'Path to AuthKey_XXXXXX.p8');
124
+ const appleId = await ask(rl, 'Optional Apple ID email (Enter to skip)', '');
125
+ if (!keyId || !issuerId || !keyPath) {
126
+ throw new Error('ASC_KEY_ID, ASC_ISSUER_ID, and .p8 path are required.');
127
+ }
128
+ apple = { keyId, issuerId, keyPath, appleId };
129
+ }
130
+ const wantPlay = await askYesNo(rl, 'Configure Google Play service-account credentials?', true);
131
+ let play = null;
132
+ if (wantPlay) {
133
+ const jsonPath = await ask(rl, 'Path to Play service-account JSON');
134
+ if (!jsonPath)
135
+ throw new Error('Play JSON path is required.');
136
+ play = { jsonPath };
137
+ }
138
+ const wantAndroid = await askYesNo(rl, 'Configure Android upload keystore?', true);
139
+ let android = null;
140
+ if (wantAndroid) {
141
+ const storeFile = await ask(rl, 'Path to upload keystore', 'android/app/keystore.jks');
142
+ const alias = await ask(rl, 'Key alias', 'key0');
143
+ const storePassword = await readSecret('Keystore password');
144
+ const keyPasswordRaw = await readSecret('Key password (Enter to reuse keystore password)');
145
+ const keyPassword = keyPasswordRaw || storePassword;
146
+ if (!storeFile || !alias || !storePassword || !keyPassword) {
147
+ throw new Error('Keystore path, alias, and passwords are required.');
148
+ }
149
+ android = { storeFile, alias, storePassword, keyPassword };
150
+ }
151
+ if (!apple && !play && !android) {
152
+ console.log('Skipped credential setup.');
153
+ return { configured: false, provider };
154
+ }
155
+ if (options.dryRun) {
156
+ console.log('Dry run: would write credentials via selected provider.');
157
+ return { configured: true, provider };
158
+ }
159
+ const previousUmask = process.umask(0o077);
160
+ try {
161
+ ensureSecretDir(path.join(projectRoot, 'secrets'));
162
+ ensureSecretDir(path.join(projectRoot, 'fastlane'));
163
+ ensureSecretDir(path.join(projectRoot, 'android'));
164
+ ensureSecretDir(projectVaultDir(projectRoot));
165
+ const values = {
166
+ ASC_KEY_ID: '',
167
+ ASC_ISSUER_ID: '',
168
+ ASC_KEY_FILEPATH: '',
169
+ APPLE_ID: '',
170
+ PLAY_JSON_KEY_PATH: '',
171
+ MYAPP_UPLOAD_STORE_FILE: 'keystore.jks',
172
+ MYAPP_UPLOAD_KEY_ALIAS: 'key0',
173
+ MYAPP_UPLOAD_STORE_PASSWORD: '',
174
+ MYAPP_UPLOAD_KEY_PASSWORD: '',
175
+ };
176
+ if (apple) {
177
+ const source = assertCredentialSource(projectRoot, apple.keyPath, allowExternal);
178
+ const destName = `AuthKey_${apple.keyId}.p8`;
179
+ const vaultDest = path.join(projectVaultDir(projectRoot), destName);
180
+ copyFileSecure(source, vaultDest, 0o600);
181
+ if (provider === 'file') {
182
+ const projectDest = path.join(projectRoot, 'secrets', destName);
183
+ assertNotGitTracked(projectRoot, `secrets/${destName}`);
184
+ copyFileSecure(source, projectDest, 0o600);
185
+ values.ASC_KEY_FILEPATH = `secrets/${destName}`;
186
+ }
187
+ else {
188
+ values.ASC_KEY_FILEPATH = vaultDest;
189
+ keychainSet(`rn-local-release:${path.basename(projectRoot)}`, 'ASC_KEY_ID', apple.keyId);
190
+ keychainSet(`rn-local-release:${path.basename(projectRoot)}`, 'ASC_ISSUER_ID', apple.issuerId);
191
+ }
192
+ values.ASC_KEY_ID = apple.keyId;
193
+ values.ASC_ISSUER_ID = apple.issuerId;
194
+ values.APPLE_ID = apple.appleId;
195
+ }
196
+ if (play) {
197
+ const source = assertCredentialSource(projectRoot, play.jsonPath, allowExternal);
198
+ const destName = 'play-store-service-account.json';
199
+ const vaultDest = path.join(projectVaultDir(projectRoot), destName);
200
+ copyFileSecure(source, vaultDest, 0o600);
201
+ if (provider === 'file') {
202
+ const projectDest = path.join(projectRoot, 'secrets', destName);
203
+ assertNotGitTracked(projectRoot, `secrets/${destName}`);
204
+ copyFileSecure(source, projectDest, 0o600);
205
+ values.PLAY_JSON_KEY_PATH = `secrets/${destName}`;
206
+ }
207
+ else {
208
+ values.PLAY_JSON_KEY_PATH = vaultDest;
209
+ }
210
+ }
211
+ if (android) {
212
+ const source = assertCredentialSource(projectRoot, android.storeFile, allowExternal);
213
+ const base = path.basename(source);
214
+ const appDest = path.join(projectRoot, 'android', 'app', base);
215
+ if (path.resolve(source) !== path.resolve(appDest)) {
216
+ copyFileSecure(source, appDest, 0o600);
217
+ }
218
+ else {
219
+ // Already in place — harden mode instead of failing on default umask 0644.
220
+ fs.chmodSync(appDest, 0o600);
221
+ assertOwnerOnlyReadable(appDest);
222
+ }
223
+ values.MYAPP_UPLOAD_STORE_FILE = base;
224
+ values.MYAPP_UPLOAD_KEY_ALIAS = android.alias;
225
+ values.MYAPP_UPLOAD_STORE_PASSWORD = android.storePassword;
226
+ values.MYAPP_UPLOAD_KEY_PASSWORD = android.keyPassword;
227
+ if (provider === 'keychain') {
228
+ const service = `rn-local-release:${path.basename(projectRoot)}`;
229
+ keychainSet(service, 'MYAPP_UPLOAD_STORE_PASSWORD', android.storePassword);
230
+ keychainSet(service, 'MYAPP_UPLOAD_KEY_PASSWORD', android.keyPassword);
231
+ keychainSet(service, 'MYAPP_UPLOAD_KEY_ALIAS', android.alias);
232
+ // Still write keystore.properties without passwords for Gradle filename/alias only.
233
+ writeKeystoreProperties(path.join(projectRoot, 'android', 'keystore.properties'), {
234
+ ...values,
235
+ MYAPP_UPLOAD_STORE_PASSWORD: '',
236
+ MYAPP_UPLOAD_KEY_PASSWORD: '',
237
+ });
238
+ }
239
+ else {
240
+ assertNotGitTracked(projectRoot, 'android/keystore.properties');
241
+ writeKeystoreProperties(path.join(projectRoot, 'android', 'keystore.properties'), values);
242
+ }
243
+ }
244
+ // Always write a non-secret reference env for Fastlane paths; passwords only for file provider.
245
+ assertNotGitTracked(projectRoot, 'fastlane/.env');
246
+ if (provider === 'file') {
247
+ writeEnvFile(path.join(projectRoot, 'fastlane', '.env'), values);
248
+ }
249
+ else {
250
+ writeEnvFile(path.join(projectRoot, 'fastlane', '.env'), {
251
+ ...values,
252
+ MYAPP_UPLOAD_STORE_PASSWORD: '',
253
+ MYAPP_UPLOAD_KEY_PASSWORD: '',
254
+ });
255
+ // Materialize passwords into env from keychain at runtime via doctor/release helpers.
256
+ if (android) {
257
+ const service = `rn-local-release:${path.basename(projectRoot)}`;
258
+ // Ensure we can read them back
259
+ keychainGet(service, 'MYAPP_UPLOAD_STORE_PASSWORD');
260
+ }
261
+ }
262
+ console.log('');
263
+ console.log('Credentials configured.');
264
+ console.log(` provider: ${provider}`);
265
+ if (provider === 'file') {
266
+ console.log(' - fastlane/.env');
267
+ console.log(' - android/keystore.properties (if Android configured)');
268
+ console.log(' - secrets/ (copied key files)');
269
+ }
270
+ else {
271
+ console.log(` - vault: ${toPosixRelative(os.homedir(), projectVaultDir(projectRoot))}`);
272
+ console.log(' - macOS Keychain entries for scalar secrets');
273
+ console.log(' - fastlane/.env contains non-secret path references only');
274
+ }
275
+ return { configured: true, provider };
276
+ }
277
+ finally {
278
+ process.umask(previousUmask);
279
+ }
280
+ }
281
+ export function materializeKeychainPasswords(projectRoot) {
282
+ if (!keychainAvailable())
283
+ return;
284
+ const service = `rn-local-release:${path.basename(projectRoot)}`;
285
+ const storePassword = keychainGet(service, 'MYAPP_UPLOAD_STORE_PASSWORD');
286
+ const keyPassword = keychainGet(service, 'MYAPP_UPLOAD_KEY_PASSWORD');
287
+ const alias = keychainGet(service, 'MYAPP_UPLOAD_KEY_ALIAS');
288
+ if (storePassword)
289
+ process.env.MYAPP_UPLOAD_STORE_PASSWORD = storePassword;
290
+ if (keyPassword)
291
+ process.env.MYAPP_UPLOAD_KEY_PASSWORD = keyPassword;
292
+ if (alias)
293
+ process.env.MYAPP_UPLOAD_KEY_ALIAS = alias;
294
+ const ascKey = keychainGet(service, 'ASC_KEY_ID');
295
+ const ascIssuer = keychainGet(service, 'ASC_ISSUER_ID');
296
+ if (ascKey)
297
+ process.env.ASC_KEY_ID = ascKey;
298
+ if (ascIssuer)
299
+ process.env.ASC_ISSUER_ID = ascIssuer;
300
+ }
301
+ export function purgeCredentials(projectRoot) {
302
+ const service = `rn-local-release:${path.basename(projectRoot)}`;
303
+ for (const account of [
304
+ 'ASC_KEY_ID',
305
+ 'ASC_ISSUER_ID',
306
+ 'MYAPP_UPLOAD_STORE_PASSWORD',
307
+ 'MYAPP_UPLOAD_KEY_PASSWORD',
308
+ 'MYAPP_UPLOAD_KEY_ALIAS',
309
+ ]) {
310
+ keychainDelete(service, account);
311
+ }
312
+ const vault = projectVaultDir(projectRoot);
313
+ if (exists(vault)) {
314
+ fs.rmSync(vault, { recursive: true, force: true });
315
+ }
316
+ }
317
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CliOptions, DetectionResult, ReleaseConfig } from './types.js';
2
+ export declare function detectProject(root: string, options?: Partial<CliOptions>): DetectionResult;
3
+ export declare function buildReleaseConfig(detection: DetectionResult, overrides?: Partial<CliOptions> & {
4
+ storeUploadedVersions?: boolean | null;
5
+ credentialProvider?: 'keychain' | 'file' | 'env';
6
+ }): ReleaseConfig;
7
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0K7E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,eAAe,CAuD9F;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,eAAe,EAC1B,SAAS,GAAE,OAAO,CAAC,UAAU,CAAC,GAAG;IAC/B,qBAAqB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC,kBAAkB,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;CAC7C,GACL,aAAa,CAuIf"}