hot-updater 0.23.0 → 0.23.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.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { _ as __toESM, a as nativeFingerprint, c as showFingerprintDiff, d as IosConfigParser, f as require_plist, g as __require, h as __commonJS, i as generateFingerprints, l as isFingerprintEquals, m as AndroidConfigParser, o as readLocalFingerprint, p as require_base64_js, s as getFingerprintDiff, t as createAndInjectFingerprintFiles, u as require_out } from "./fingerprint-11-3nNgi.js";
2
+ import { _ as require_base64_js, a as createAndInjectFingerprintFiles, b as __require, c as generateFingerprints, d as getFingerprintDiff, f as showFingerprintDiff, g as require_plist, h as IosConfigParser, i as saveKeyPair, l as nativeFingerprint, m as require_out, n as getPublicKeyFromPrivate, p as isFingerprintEquals, r as loadPrivateKey, t as generateKeyPair, u as readLocalFingerprint, v as AndroidConfigParser, x as __toESM, y as __commonJS } from "./keyGeneration-D_2zTEmt.js";
3
3
  import { EventEmitter, addAbortListener, on, once, setMaxListeners } from "node:events";
4
4
  import childProcess, { ChildProcess, execFile, spawn, spawnSync } from "node:child_process";
5
5
  import path from "node:path";
@@ -35437,74 +35437,6 @@ const appendOutputDirectoryIntoGitignore = ({ cwd } = {}) => {
35437
35437
  });
35438
35438
  };
35439
35439
 
35440
- //#endregion
35441
- //#region src/utils/signing/keyGeneration.ts
35442
- /**
35443
- * Generate RSA key pair for bundle signing.
35444
- * @param keySize Key size in bits (2048 or 4096)
35445
- * @returns Promise resolving to key pair in PEM format
35446
- */
35447
- async function generateKeyPair(keySize = 4096) {
35448
- return new Promise((resolve, reject) => {
35449
- crypto$1.generateKeyPair("rsa", {
35450
- modulusLength: keySize,
35451
- publicKeyEncoding: {
35452
- type: "spki",
35453
- format: "pem"
35454
- },
35455
- privateKeyEncoding: {
35456
- type: "pkcs8",
35457
- format: "pem"
35458
- }
35459
- }, (err, publicKey, privateKey) => {
35460
- if (err) reject(err);
35461
- else resolve({
35462
- privateKey,
35463
- publicKey
35464
- });
35465
- });
35466
- });
35467
- }
35468
- /**
35469
- * Save key pair to disk with secure permissions.
35470
- * @param keyPair Generated key pair
35471
- * @param outputDir Directory to save keys
35472
- */
35473
- async function saveKeyPair(keyPair, outputDir) {
35474
- await fs$2.mkdir(outputDir, { recursive: true });
35475
- const privateKeyPath = path.join(outputDir, "private-key.pem");
35476
- const publicKeyPath = path.join(outputDir, "public-key.pem");
35477
- await fs$2.writeFile(privateKeyPath, keyPair.privateKey, { mode: 384 });
35478
- await fs$2.writeFile(publicKeyPath, keyPair.publicKey, { mode: 420 });
35479
- }
35480
- /**
35481
- * Load private key from PEM file.
35482
- * @param privateKeyPath Path to private key file
35483
- * @returns Private key in PEM format
35484
- * @throws Error if file not found or invalid format
35485
- */
35486
- async function loadPrivateKey(privateKeyPath) {
35487
- try {
35488
- const privateKey = await fs$2.readFile(privateKeyPath, "utf-8");
35489
- crypto$1.createPrivateKey(privateKey);
35490
- return privateKey;
35491
- } catch (error) {
35492
- throw new Error(`Failed to load private key from ${privateKeyPath}: ${error.message}`);
35493
- }
35494
- }
35495
- /**
35496
- * Extract public key from private key.
35497
- * @param privateKeyPEM Private key in PEM format
35498
- * @returns Public key in PEM format
35499
- */
35500
- function getPublicKeyFromPrivate(privateKeyPEM) {
35501
- const privateKey = crypto$1.createPrivateKey(privateKeyPEM);
35502
- return crypto$1.createPublicKey(privateKey).export({
35503
- type: "spki",
35504
- format: "pem"
35505
- });
35506
- }
35507
-
35508
35440
  //#endregion
35509
35441
  //#region src/utils/signing/bundleSigning.ts
35510
35442
  /**
@@ -37538,9 +37470,13 @@ const keysGenerate = async (options = {}) => {
37538
37470
  spinner.stop("Keys generated successfully");
37539
37471
  p.log.success(`Private key: ${path.join(outputDir, "private-key.pem")}`);
37540
37472
  p.log.success(`Public key: ${path.join(outputDir, "public-key.pem")}`);
37473
+ const keysDir = path.basename(outputDir);
37474
+ if (appendToProjectRootGitignore({
37475
+ cwd,
37476
+ globLines: [`${keysDir}/`]
37477
+ })) p.log.success(`Added ${keysDir}/ to .gitignore`);
37541
37478
  console.log("");
37542
37479
  p.log.warn("⚠️ Keep private key secure!");
37543
- p.log.warn(" - Add keys/ to .gitignore");
37544
37480
  p.log.warn(" - Use secure storage for CI/CD (AWS Secrets Manager, etc.)");
37545
37481
  console.log("");
37546
37482
  p.log.info("Next steps:");
@@ -1,4 +1,6 @@
1
1
  const require_chunk = require('./chunk-DWy1uDak.cjs');
2
+ let node_path = require("node:path");
3
+ node_path = require_chunk.__toESM(node_path);
2
4
  let __hot_updater_cli_tools = require("@hot-updater/cli-tools");
3
5
  __hot_updater_cli_tools = require_chunk.__toESM(__hot_updater_cli_tools);
4
6
  let path = require("path");
@@ -7,6 +9,10 @@ let fs = require("fs");
7
9
  fs = require_chunk.__toESM(fs);
8
10
  let __expo_fingerprint = require("@expo/fingerprint");
9
11
  __expo_fingerprint = require_chunk.__toESM(__expo_fingerprint);
12
+ let node_fs_promises = require("node:fs/promises");
13
+ node_fs_promises = require_chunk.__toESM(node_fs_promises);
14
+ let node_crypto = require("node:crypto");
15
+ node_crypto = require_chunk.__toESM(node_crypto);
10
16
 
11
17
  //#region ../../node_modules/.pnpm/fast-xml-parser@5.2.3/node_modules/fast-xml-parser/src/util.js
12
18
  const nameStartChar$1 = ":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
@@ -1474,10 +1480,10 @@ var AndroidConfigParser = class {
1474
1480
  });
1475
1481
  }
1476
1482
  async exists() {
1477
- return this.stringsXmlPaths.some((path$15) => fs.default.existsSync(path$15));
1483
+ return this.stringsXmlPaths.some((path$16) => fs.default.existsSync(path$16));
1478
1484
  }
1479
1485
  getExistingPaths() {
1480
- return this.stringsXmlPaths.filter((path$15) => fs.default.existsSync(path$15));
1486
+ return this.stringsXmlPaths.filter((path$16) => fs.default.existsSync(path$16));
1481
1487
  }
1482
1488
  async get(key) {
1483
1489
  const existingPaths = this.getExistingPaths();
@@ -9232,7 +9238,7 @@ var require_fs$3 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_module
9232
9238
  var require_path = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/path.js": ((exports) => {
9233
9239
  Object.defineProperty(exports, "__esModule", { value: true });
9234
9240
  const os$1 = require("os");
9235
- const path$12 = require("path");
9241
+ const path$13 = require("path");
9236
9242
  const IS_WINDOWS_PLATFORM = os$1.platform() === "win32";
9237
9243
  const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2;
9238
9244
  /**
@@ -9261,7 +9267,7 @@ var require_path = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_module
9261
9267
  }
9262
9268
  exports.unixify = unixify;
9263
9269
  function makeAbsolute(cwd, filepath) {
9264
- return path$12.resolve(cwd, filepath);
9270
+ return path$13.resolve(cwd, filepath);
9265
9271
  }
9266
9272
  exports.makeAbsolute = makeAbsolute;
9267
9273
  function removeLeadingDotSegment(entry) {
@@ -10508,7 +10514,7 @@ var require_braces = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modu
10508
10514
  //#endregion
10509
10515
  //#region ../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/constants.js
10510
10516
  var require_constants$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/constants.js": ((exports, module) => {
10511
- const path$11 = require("path");
10517
+ const path$12 = require("path");
10512
10518
  const WIN_SLASH = "\\\\/";
10513
10519
  const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
10514
10520
  /**
@@ -10633,7 +10639,7 @@ var require_constants$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node
10633
10639
  CHAR_UNDERSCORE: 95,
10634
10640
  CHAR_VERTICAL_LINE: 124,
10635
10641
  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279,
10636
- SEP: path$11.sep,
10642
+ SEP: path$12.sep,
10637
10643
  extglobChars(chars$1) {
10638
10644
  return {
10639
10645
  "!": {
@@ -10672,7 +10678,7 @@ var require_constants$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node
10672
10678
  //#endregion
10673
10679
  //#region ../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/utils.js
10674
10680
  var require_utils$2 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/utils.js": ((exports) => {
10675
- const path$10 = require("path");
10681
+ const path$11 = require("path");
10676
10682
  const win32 = process.platform === "win32";
10677
10683
  const { REGEX_BACKSLASH, REGEX_REMOVE_BACKSLASH, REGEX_SPECIAL_CHARS, REGEX_SPECIAL_CHARS_GLOBAL } = require_constants$1();
10678
10684
  exports.isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
@@ -10692,7 +10698,7 @@ var require_utils$2 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mod
10692
10698
  };
10693
10699
  exports.isWindows = (options) => {
10694
10700
  if (options && typeof options.windows === "boolean") return options.windows;
10695
- return win32 === true || path$10.sep === "\\";
10701
+ return win32 === true || path$11.sep === "\\";
10696
10702
  };
10697
10703
  exports.escapeLast = (input, char, lastIdx) => {
10698
10704
  const idx = input.lastIndexOf(char, lastIdx);
@@ -11868,7 +11874,7 @@ var require_parse = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modul
11868
11874
  //#endregion
11869
11875
  //#region ../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/picomatch.js
11870
11876
  var require_picomatch$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/picomatch.js": ((exports, module) => {
11871
- const path$9 = require("path");
11877
+ const path$10 = require("path");
11872
11878
  const scan = require_scan();
11873
11879
  const parse = require_parse();
11874
11880
  const utils$11 = require_utils$2();
@@ -12007,7 +12013,7 @@ var require_picomatch$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node
12007
12013
  * @api public
12008
12014
  */
12009
12015
  picomatch$1.matchBase = (input, glob, options, posix = utils$11.isWindows(options)) => {
12010
- return (glob instanceof RegExp ? glob : picomatch$1.makeRe(glob, options)).test(path$9.basename(input));
12016
+ return (glob instanceof RegExp ? glob : picomatch$1.makeRe(glob, options)).test(path$10.basename(input));
12011
12017
  };
12012
12018
  /**
12013
12019
  * Returns true if **any** of the given glob `patterns` match the specified `string`.
@@ -12564,7 +12570,7 @@ var require_micromatch = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_
12564
12570
  //#region ../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/pattern.js
12565
12571
  var require_pattern = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/pattern.js": ((exports) => {
12566
12572
  Object.defineProperty(exports, "__esModule", { value: true });
12567
- const path$8 = require("path");
12573
+ const path$9 = require("path");
12568
12574
  const globParent = require_glob_parent();
12569
12575
  const micromatch = require_micromatch();
12570
12576
  const GLOBSTAR = "**";
@@ -12672,7 +12678,7 @@ var require_pattern = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mod
12672
12678
  }
12673
12679
  exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
12674
12680
  function isAffectDepthOfReadingPattern(pattern$1) {
12675
- const basename = path$8.basename(pattern$1);
12681
+ const basename = path$9.basename(pattern$1);
12676
12682
  return endsWithSlashGlobStar(pattern$1) || isStaticPattern(basename);
12677
12683
  }
12678
12684
  exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
@@ -12746,7 +12752,7 @@ var require_pattern = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mod
12746
12752
  }
12747
12753
  exports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;
12748
12754
  function isAbsolute(pattern$1) {
12749
- return path$8.isAbsolute(pattern$1);
12755
+ return path$9.isAbsolute(pattern$1);
12750
12756
  }
12751
12757
  exports.isAbsolute = isAbsolute;
12752
12758
  }) });
@@ -12874,10 +12880,10 @@ var require_utils$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mod
12874
12880
  exports.array = array;
12875
12881
  const errno = require_errno();
12876
12882
  exports.errno = errno;
12877
- const fs$9 = require_fs$3();
12878
- exports.fs = fs$9;
12879
- const path$7 = require_path();
12880
- exports.path = path$7;
12883
+ const fs$10 = require_fs$3();
12884
+ exports.fs = fs$10;
12885
+ const path$8 = require_path();
12886
+ exports.path = path$8;
12881
12887
  const pattern = require_pattern();
12882
12888
  exports.pattern = pattern;
12883
12889
  const stream = require_stream$3();
@@ -12984,8 +12990,8 @@ var require_tasks = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modul
12984
12990
  //#region ../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.js
12985
12991
  var require_async$5 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.js": ((exports) => {
12986
12992
  Object.defineProperty(exports, "__esModule", { value: true });
12987
- function read$3(path$15, settings, callback) {
12988
- settings.fs.lstat(path$15, (lstatError, lstat) => {
12993
+ function read$3(path$16, settings, callback) {
12994
+ settings.fs.lstat(path$16, (lstatError, lstat) => {
12989
12995
  if (lstatError !== null) {
12990
12996
  callFailureCallback$2(callback, lstatError);
12991
12997
  return;
@@ -12994,7 +13000,7 @@ var require_async$5 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mod
12994
13000
  callSuccessCallback$2(callback, lstat);
12995
13001
  return;
12996
13002
  }
12997
- settings.fs.stat(path$15, (statError, stat$1) => {
13003
+ settings.fs.stat(path$16, (statError, stat$1) => {
12998
13004
  if (statError !== null) {
12999
13005
  if (settings.throwErrorOnBrokenSymbolicLink) {
13000
13006
  callFailureCallback$2(callback, statError);
@@ -13021,11 +13027,11 @@ var require_async$5 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mod
13021
13027
  //#region ../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/sync.js
13022
13028
  var require_sync$5 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/sync.js": ((exports) => {
13023
13029
  Object.defineProperty(exports, "__esModule", { value: true });
13024
- function read$2(path$15, settings) {
13025
- const lstat = settings.fs.lstatSync(path$15);
13030
+ function read$2(path$16, settings) {
13031
+ const lstat = settings.fs.lstatSync(path$16);
13026
13032
  if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) return lstat;
13027
13033
  try {
13028
- const stat$1 = settings.fs.statSync(path$15);
13034
+ const stat$1 = settings.fs.statSync(path$16);
13029
13035
  if (settings.markSymbolicLink) stat$1.isSymbolicLink = () => true;
13030
13036
  return stat$1;
13031
13037
  } catch (error) {
@@ -13041,12 +13047,12 @@ var require_sync$5 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modu
13041
13047
  var require_fs$2 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/adapters/fs.js": ((exports) => {
13042
13048
  Object.defineProperty(exports, "__esModule", { value: true });
13043
13049
  exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
13044
- const fs$8 = require("fs");
13050
+ const fs$9 = require("fs");
13045
13051
  exports.FILE_SYSTEM_ADAPTER = {
13046
- lstat: fs$8.lstat,
13047
- stat: fs$8.stat,
13048
- lstatSync: fs$8.lstatSync,
13049
- statSync: fs$8.statSync
13052
+ lstat: fs$9.lstat,
13053
+ stat: fs$9.stat,
13054
+ lstatSync: fs$9.lstatSync,
13055
+ statSync: fs$9.statSync
13050
13056
  };
13051
13057
  function createFileSystemAdapter$1(fsMethods) {
13052
13058
  if (fsMethods === void 0) return exports.FILE_SYSTEM_ADAPTER;
@@ -13059,12 +13065,12 @@ var require_fs$2 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_module
13059
13065
  //#region ../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.js
13060
13066
  var require_settings$3 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.js": ((exports) => {
13061
13067
  Object.defineProperty(exports, "__esModule", { value: true });
13062
- const fs$7 = require_fs$2();
13068
+ const fs$8 = require_fs$2();
13063
13069
  var Settings$3 = class {
13064
13070
  constructor(_options = {}) {
13065
13071
  this._options = _options;
13066
13072
  this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
13067
- this.fs = fs$7.createFileSystemAdapter(this._options.fs);
13073
+ this.fs = fs$8.createFileSystemAdapter(this._options.fs);
13068
13074
  this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
13069
13075
  this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
13070
13076
  }
@@ -13083,17 +13089,17 @@ var require_out$3 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modul
13083
13089
  const sync$1 = require_sync$5();
13084
13090
  const settings_1$3 = require_settings$3();
13085
13091
  exports.Settings = settings_1$3.default;
13086
- function stat(path$15, optionsOrSettingsOrCallback, callback) {
13092
+ function stat(path$16, optionsOrSettingsOrCallback, callback) {
13087
13093
  if (typeof optionsOrSettingsOrCallback === "function") {
13088
- async$1.read(path$15, getSettings$2(), optionsOrSettingsOrCallback);
13094
+ async$1.read(path$16, getSettings$2(), optionsOrSettingsOrCallback);
13089
13095
  return;
13090
13096
  }
13091
- async$1.read(path$15, getSettings$2(optionsOrSettingsOrCallback), callback);
13097
+ async$1.read(path$16, getSettings$2(optionsOrSettingsOrCallback), callback);
13092
13098
  }
13093
13099
  exports.stat = stat;
13094
- function statSync(path$15, optionsOrSettings) {
13100
+ function statSync(path$16, optionsOrSettings) {
13095
13101
  const settings = getSettings$2(optionsOrSettings);
13096
- return sync$1.read(path$15, settings);
13102
+ return sync$1.read(path$16, settings);
13097
13103
  }
13098
13104
  exports.statSync = statSync;
13099
13105
  function getSettings$2(settingsOrOptions = {}) {
@@ -13200,8 +13206,8 @@ var require_fs$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_module
13200
13206
  //#region ../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/index.js
13201
13207
  var require_utils = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/index.js": ((exports) => {
13202
13208
  Object.defineProperty(exports, "__esModule", { value: true });
13203
- const fs$6 = require_fs$1();
13204
- exports.fs = fs$6;
13209
+ const fs$7 = require_fs$1();
13210
+ exports.fs = fs$7;
13205
13211
  }) });
13206
13212
 
13207
13213
  //#endregion
@@ -13287,16 +13293,16 @@ var require_async$4 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mod
13287
13293
  return;
13288
13294
  }
13289
13295
  rpl(names.map((name) => {
13290
- const path$15 = common$4.joinPathSegments(directory, name, settings.pathSegmentSeparator);
13296
+ const path$16 = common$4.joinPathSegments(directory, name, settings.pathSegmentSeparator);
13291
13297
  return (done) => {
13292
- fsStat$5.stat(path$15, settings.fsStatSettings, (error, stats) => {
13298
+ fsStat$5.stat(path$16, settings.fsStatSettings, (error, stats) => {
13293
13299
  if (error !== null) {
13294
13300
  done(error);
13295
13301
  return;
13296
13302
  }
13297
13303
  const entry = {
13298
13304
  name,
13299
- path: path$15,
13305
+ path: path$16,
13300
13306
  dirent: utils$8.fs.createDirentFromStats(name, stats)
13301
13307
  };
13302
13308
  if (settings.stats) entry.stats = stats;
@@ -13372,14 +13378,14 @@ var require_sync$4 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modu
13372
13378
  var require_fs = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/adapters/fs.js": ((exports) => {
13373
13379
  Object.defineProperty(exports, "__esModule", { value: true });
13374
13380
  exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
13375
- const fs$5 = require("fs");
13381
+ const fs$6 = require("fs");
13376
13382
  exports.FILE_SYSTEM_ADAPTER = {
13377
- lstat: fs$5.lstat,
13378
- stat: fs$5.stat,
13379
- lstatSync: fs$5.lstatSync,
13380
- statSync: fs$5.statSync,
13381
- readdir: fs$5.readdir,
13382
- readdirSync: fs$5.readdirSync
13383
+ lstat: fs$6.lstat,
13384
+ stat: fs$6.stat,
13385
+ lstatSync: fs$6.lstatSync,
13386
+ statSync: fs$6.statSync,
13387
+ readdir: fs$6.readdir,
13388
+ readdirSync: fs$6.readdirSync
13383
13389
  };
13384
13390
  function createFileSystemAdapter(fsMethods) {
13385
13391
  if (fsMethods === void 0) return exports.FILE_SYSTEM_ADAPTER;
@@ -13392,15 +13398,15 @@ var require_fs = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/
13392
13398
  //#region ../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.js
13393
13399
  var require_settings$2 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.js": ((exports) => {
13394
13400
  Object.defineProperty(exports, "__esModule", { value: true });
13395
- const path$6 = require("path");
13401
+ const path$7 = require("path");
13396
13402
  const fsStat$3 = require_out$3();
13397
- const fs$4 = require_fs();
13403
+ const fs$5 = require_fs();
13398
13404
  var Settings$2 = class {
13399
13405
  constructor(_options = {}) {
13400
13406
  this._options = _options;
13401
13407
  this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
13402
- this.fs = fs$4.createFileSystemAdapter(this._options.fs);
13403
- this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$6.sep);
13408
+ this.fs = fs$5.createFileSystemAdapter(this._options.fs);
13409
+ this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$7.sep);
13404
13410
  this.stats = this._getValue(this._options.stats, false);
13405
13411
  this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
13406
13412
  this.fsStatSettings = new fsStat$3.Settings({
@@ -13424,17 +13430,17 @@ var require_out$2 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modul
13424
13430
  const sync = require_sync$4();
13425
13431
  const settings_1$2 = require_settings$2();
13426
13432
  exports.Settings = settings_1$2.default;
13427
- function scandir(path$15, optionsOrSettingsOrCallback, callback) {
13433
+ function scandir(path$16, optionsOrSettingsOrCallback, callback) {
13428
13434
  if (typeof optionsOrSettingsOrCallback === "function") {
13429
- async.read(path$15, getSettings$1(), optionsOrSettingsOrCallback);
13435
+ async.read(path$16, getSettings$1(), optionsOrSettingsOrCallback);
13430
13436
  return;
13431
13437
  }
13432
- async.read(path$15, getSettings$1(optionsOrSettingsOrCallback), callback);
13438
+ async.read(path$16, getSettings$1(optionsOrSettingsOrCallback), callback);
13433
13439
  }
13434
13440
  exports.scandir = scandir;
13435
- function scandirSync(path$15, optionsOrSettings) {
13441
+ function scandirSync(path$16, optionsOrSettings) {
13436
13442
  const settings = getSettings$1(optionsOrSettings);
13437
- return sync.read(path$15, settings);
13443
+ return sync.read(path$16, settings);
13438
13444
  }
13439
13445
  exports.scandirSync = scandirSync;
13440
13446
  function getSettings$1(settingsOrOptions = {}) {
@@ -13979,7 +13985,7 @@ var require_sync$2 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modu
13979
13985
  //#region ../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.js
13980
13986
  var require_settings$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.js": ((exports) => {
13981
13987
  Object.defineProperty(exports, "__esModule", { value: true });
13982
- const path$5 = require("path");
13988
+ const path$6 = require("path");
13983
13989
  const fsScandir = require_out$2();
13984
13990
  var Settings$1 = class {
13985
13991
  constructor(_options = {}) {
@@ -13989,7 +13995,7 @@ var require_settings$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_
13989
13995
  this.deepFilter = this._getValue(this._options.deepFilter, null);
13990
13996
  this.entryFilter = this._getValue(this._options.entryFilter, null);
13991
13997
  this.errorFilter = this._getValue(this._options.errorFilter, null);
13992
- this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$5.sep);
13998
+ this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$6.sep);
13993
13999
  this.fsScandirSettings = new fsScandir.Settings({
13994
14000
  followSymbolicLinks: this._options.followSymbolicLinks,
13995
14001
  fs: this._options.fs,
@@ -14042,7 +14048,7 @@ var require_out$1 = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modul
14042
14048
  //#region ../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/reader.js
14043
14049
  var require_reader = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/reader.js": ((exports) => {
14044
14050
  Object.defineProperty(exports, "__esModule", { value: true });
14045
- const path$4 = require("path");
14051
+ const path$5 = require("path");
14046
14052
  const fsStat$2 = require_out$3();
14047
14053
  const utils$6 = require_utils$1();
14048
14054
  var Reader = class {
@@ -14055,7 +14061,7 @@ var require_reader = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modu
14055
14061
  });
14056
14062
  }
14057
14063
  _getFullEntryPath(filepath) {
14058
- return path$4.resolve(this._settings.cwd, filepath);
14064
+ return path$5.resolve(this._settings.cwd, filepath);
14059
14065
  }
14060
14066
  _makeEntry(stats, pattern$1) {
14061
14067
  const entry = {
@@ -14399,7 +14405,7 @@ var require_entry = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modul
14399
14405
  //#region ../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/provider.js
14400
14406
  var require_provider = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/provider.js": ((exports) => {
14401
14407
  Object.defineProperty(exports, "__esModule", { value: true });
14402
- const path$3 = require("path");
14408
+ const path$4 = require("path");
14403
14409
  const deep_1 = require_deep();
14404
14410
  const entry_1 = require_entry$1();
14405
14411
  const error_1 = require_error();
@@ -14413,7 +14419,7 @@ var require_provider = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mo
14413
14419
  this.entryTransformer = new entry_2.default(this._settings);
14414
14420
  }
14415
14421
  _getRootDirectory(task) {
14416
- return path$3.resolve(this._settings.cwd, task.base);
14422
+ return path$4.resolve(this._settings.cwd, task.base);
14417
14423
  }
14418
14424
  _getReaderOptions(task) {
14419
14425
  const basePath = task.base === "." ? "" : task.base;
@@ -14574,7 +14580,7 @@ var require_sync = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_module
14574
14580
  var require_settings = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/settings.js": ((exports) => {
14575
14581
  Object.defineProperty(exports, "__esModule", { value: true });
14576
14582
  exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
14577
- const fs$3 = require("fs");
14583
+ const fs$4 = require("fs");
14578
14584
  const os = require("os");
14579
14585
  /**
14580
14586
  * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.
@@ -14582,12 +14588,12 @@ var require_settings = /* @__PURE__ */ require_chunk.__commonJS({ "../../node_mo
14582
14588
  */
14583
14589
  const CPU_COUNT = Math.max(os.cpus().length, 1);
14584
14590
  exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
14585
- lstat: fs$3.lstat,
14586
- lstatSync: fs$3.lstatSync,
14587
- stat: fs$3.stat,
14588
- statSync: fs$3.statSync,
14589
- readdir: fs$3.readdir,
14590
- readdirSync: fs$3.readdirSync
14591
+ lstat: fs$4.lstat,
14592
+ lstatSync: fs$4.lstatSync,
14593
+ stat: fs$4.stat,
14594
+ statSync: fs$4.statSync,
14595
+ readdir: fs$4.readdir,
14596
+ readdirSync: fs$4.readdirSync
14591
14597
  };
14592
14598
  var Settings = class {
14593
14599
  constructor(_options = {}) {
@@ -14793,7 +14799,7 @@ function getDefaultIgnorePaths() {
14793
14799
  "**/build/"
14794
14800
  ];
14795
14801
  }
14796
- function getOtaFingerprintOptions(platform, path$15, options) {
14802
+ function getOtaFingerprintOptions(platform, path$16, options) {
14797
14803
  return {
14798
14804
  useRNCoreAutolinkingFromExpo: false,
14799
14805
  platforms: [platform],
@@ -14834,7 +14840,7 @@ function getOtaFingerprintOptions(platform, path$15, options) {
14834
14840
  ...options.ignorePaths ?? []
14835
14841
  ],
14836
14842
  sourceSkips: __expo_fingerprint.SourceSkips.GitIgnore | __expo_fingerprint.SourceSkips.PackageJsonScriptsAll | __expo_fingerprint.SourceSkips.PackageJsonAndroidAndIosScriptsIfNotContainRun | __expo_fingerprint.SourceSkips.ExpoConfigAll | __expo_fingerprint.SourceSkips.ExpoConfigVersions | __expo_fingerprint.SourceSkips.ExpoConfigNames | __expo_fingerprint.SourceSkips.ExpoConfigRuntimeVersionIfString | __expo_fingerprint.SourceSkips.ExpoConfigAssets | __expo_fingerprint.SourceSkips.ExpoConfigExtraSection | __expo_fingerprint.SourceSkips.ExpoConfigEASProject | __expo_fingerprint.SourceSkips.ExpoConfigSchemes,
14837
- extraSources: processExtraSources(options.extraSources ?? [], path$15),
14843
+ extraSources: processExtraSources(options.extraSources ?? [], path$16),
14838
14844
  debug: options.debug
14839
14845
  };
14840
14846
  }
@@ -14874,9 +14880,9 @@ function showFingerprintDiff(diff, platform) {
14874
14880
  /**
14875
14881
  * Calculates the fingerprint of the native parts project of the project.
14876
14882
  */
14877
- async function nativeFingerprint(path$15, options) {
14883
+ async function nativeFingerprint(path$16, options) {
14878
14884
  const platform = options.platform;
14879
- return (0, __expo_fingerprint.createFingerprintAsync)(path$15, getOtaFingerprintOptions(platform, path$15, options));
14885
+ return (0, __expo_fingerprint.createFingerprintAsync)(path$16, getOtaFingerprintOptions(platform, path$16, options));
14880
14886
  }
14881
14887
  const generateFingerprints = async () => {
14882
14888
  const fingerprintConfig = await ensureFingerprintConfig();
@@ -14948,6 +14954,74 @@ const readLocalFingerprint = async () => {
14948
14954
  }
14949
14955
  };
14950
14956
 
14957
+ //#endregion
14958
+ //#region src/utils/signing/keyGeneration.ts
14959
+ /**
14960
+ * Generate RSA key pair for bundle signing.
14961
+ * @param keySize Key size in bits (2048 or 4096)
14962
+ * @returns Promise resolving to key pair in PEM format
14963
+ */
14964
+ async function generateKeyPair(keySize = 4096) {
14965
+ return new Promise((resolve, reject) => {
14966
+ node_crypto.default.generateKeyPair("rsa", {
14967
+ modulusLength: keySize,
14968
+ publicKeyEncoding: {
14969
+ type: "spki",
14970
+ format: "pem"
14971
+ },
14972
+ privateKeyEncoding: {
14973
+ type: "pkcs8",
14974
+ format: "pem"
14975
+ }
14976
+ }, (err, publicKey, privateKey) => {
14977
+ if (err) reject(err);
14978
+ else resolve({
14979
+ privateKey,
14980
+ publicKey
14981
+ });
14982
+ });
14983
+ });
14984
+ }
14985
+ /**
14986
+ * Save key pair to disk with secure permissions.
14987
+ * @param keyPair Generated key pair
14988
+ * @param outputDir Directory to save keys
14989
+ */
14990
+ async function saveKeyPair(keyPair, outputDir) {
14991
+ await node_fs_promises.default.mkdir(outputDir, { recursive: true });
14992
+ const privateKeyPath = node_path.default.join(outputDir, "private-key.pem");
14993
+ const publicKeyPath = node_path.default.join(outputDir, "public-key.pem");
14994
+ await node_fs_promises.default.writeFile(privateKeyPath, keyPair.privateKey, { mode: 384 });
14995
+ await node_fs_promises.default.writeFile(publicKeyPath, keyPair.publicKey, { mode: 420 });
14996
+ }
14997
+ /**
14998
+ * Load private key from PEM file.
14999
+ * @param privateKeyPath Path to private key file
15000
+ * @returns Private key in PEM format
15001
+ * @throws Error if file not found or invalid format
15002
+ */
15003
+ async function loadPrivateKey(privateKeyPath) {
15004
+ try {
15005
+ const privateKey = await node_fs_promises.default.readFile(privateKeyPath, "utf-8");
15006
+ node_crypto.default.createPrivateKey(privateKey);
15007
+ return privateKey;
15008
+ } catch (error) {
15009
+ throw new Error(`Failed to load private key from ${privateKeyPath}: ${error.message}`);
15010
+ }
15011
+ }
15012
+ /**
15013
+ * Extract public key from private key.
15014
+ * @param privateKeyPEM Private key in PEM format
15015
+ * @returns Public key in PEM format
15016
+ */
15017
+ function getPublicKeyFromPrivate(privateKeyPEM) {
15018
+ const privateKey = node_crypto.default.createPrivateKey(privateKeyPEM);
15019
+ return node_crypto.default.createPublicKey(privateKey).export({
15020
+ type: "spki",
15021
+ format: "pem"
15022
+ });
15023
+ }
15024
+
14951
15025
  //#endregion
14952
15026
  Object.defineProperty(exports, 'AndroidConfigParser', {
14953
15027
  enumerable: true,
@@ -14985,18 +15059,36 @@ Object.defineProperty(exports, 'generateFingerprints', {
14985
15059
  return generateFingerprints;
14986
15060
  }
14987
15061
  });
15062
+ Object.defineProperty(exports, 'generateKeyPair', {
15063
+ enumerable: true,
15064
+ get: function () {
15065
+ return generateKeyPair;
15066
+ }
15067
+ });
14988
15068
  Object.defineProperty(exports, 'getFingerprintDiff', {
14989
15069
  enumerable: true,
14990
15070
  get: function () {
14991
15071
  return getFingerprintDiff;
14992
15072
  }
14993
15073
  });
15074
+ Object.defineProperty(exports, 'getPublicKeyFromPrivate', {
15075
+ enumerable: true,
15076
+ get: function () {
15077
+ return getPublicKeyFromPrivate;
15078
+ }
15079
+ });
14994
15080
  Object.defineProperty(exports, 'isFingerprintEquals', {
14995
15081
  enumerable: true,
14996
15082
  get: function () {
14997
15083
  return isFingerprintEquals;
14998
15084
  }
14999
15085
  });
15086
+ Object.defineProperty(exports, 'loadPrivateKey', {
15087
+ enumerable: true,
15088
+ get: function () {
15089
+ return loadPrivateKey;
15090
+ }
15091
+ });
15000
15092
  Object.defineProperty(exports, 'nativeFingerprint', {
15001
15093
  enumerable: true,
15002
15094
  get: function () {
@@ -15027,6 +15119,12 @@ Object.defineProperty(exports, 'require_plist', {
15027
15119
  return require_plist;
15028
15120
  }
15029
15121
  });
15122
+ Object.defineProperty(exports, 'saveKeyPair', {
15123
+ enumerable: true,
15124
+ get: function () {
15125
+ return saveKeyPair;
15126
+ }
15127
+ });
15030
15128
  Object.defineProperty(exports, 'showFingerprintDiff', {
15031
15129
  enumerable: true,
15032
15130
  get: function () {