@kamaras/venpm 0.2.0 → 0.3.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.
Files changed (70) hide show
  1. package/README.md +13 -3
  2. package/dist/cli/completions.d.ts.map +1 -1
  3. package/dist/cli/completions.js +4 -0
  4. package/dist/cli/completions.js.map +1 -1
  5. package/dist/cli/config-cmd.js +2 -2
  6. package/dist/cli/config-cmd.js.map +1 -1
  7. package/dist/cli/context.d.ts.map +1 -1
  8. package/dist/cli/context.js +3 -0
  9. package/dist/cli/context.js.map +1 -1
  10. package/dist/cli/create.d.ts.map +1 -1
  11. package/dist/cli/create.js +1 -0
  12. package/dist/cli/create.js.map +1 -1
  13. package/dist/cli/first-run.d.ts.map +1 -1
  14. package/dist/cli/first-run.js +2 -1
  15. package/dist/cli/first-run.js.map +1 -1
  16. package/dist/cli/inject.d.ts +4 -0
  17. package/dist/cli/inject.d.ts.map +1 -0
  18. package/dist/cli/inject.js +138 -0
  19. package/dist/cli/inject.js.map +1 -0
  20. package/dist/cli/install.d.ts.map +1 -1
  21. package/dist/cli/install.js +4 -5
  22. package/dist/cli/install.js.map +1 -1
  23. package/dist/cli/kill-discord.d.ts +3 -0
  24. package/dist/cli/kill-discord.d.ts.map +1 -0
  25. package/dist/cli/kill-discord.js +39 -0
  26. package/dist/cli/kill-discord.js.map +1 -0
  27. package/dist/cli/rebuild.js +1 -1
  28. package/dist/cli/rebuild.js.map +1 -1
  29. package/dist/core/builder.d.ts +10 -5
  30. package/dist/core/builder.d.ts.map +1 -1
  31. package/dist/core/builder.js +16 -29
  32. package/dist/core/builder.js.map +1 -1
  33. package/dist/core/config.d.ts.map +1 -1
  34. package/dist/core/config.js +8 -1
  35. package/dist/core/config.js.map +1 -1
  36. package/dist/core/discord.d.ts +36 -0
  37. package/dist/core/discord.d.ts.map +1 -0
  38. package/dist/core/discord.js +183 -0
  39. package/dist/core/discord.js.map +1 -0
  40. package/dist/core/errors.d.ts +4 -0
  41. package/dist/core/errors.d.ts.map +1 -1
  42. package/dist/core/errors.js +9 -0
  43. package/dist/core/errors.js.map +1 -1
  44. package/dist/core/fetcher.d.ts.map +1 -1
  45. package/dist/core/fetcher.js +6 -2
  46. package/dist/core/fetcher.js.map +1 -1
  47. package/dist/core/inject.d.ts +60 -0
  48. package/dist/core/inject.d.ts.map +1 -0
  49. package/dist/core/inject.js +224 -0
  50. package/dist/core/inject.js.map +1 -0
  51. package/dist/core/lockfile.d.ts.map +1 -1
  52. package/dist/core/lockfile.js +8 -2
  53. package/dist/core/lockfile.js.map +1 -1
  54. package/dist/core/registry.js +4 -4
  55. package/dist/core/registry.js.map +1 -1
  56. package/dist/core/resolver.d.ts.map +1 -1
  57. package/dist/core/resolver.js +2 -4
  58. package/dist/core/resolver.js.map +1 -1
  59. package/dist/core/schema.d.ts.map +1 -1
  60. package/dist/core/schema.js +14 -4
  61. package/dist/core/schema.js.map +1 -1
  62. package/dist/core/types.d.ts +1 -0
  63. package/dist/core/types.d.ts.map +1 -1
  64. package/dist/index.js +5 -0
  65. package/dist/index.js.map +1 -1
  66. package/package.json +5 -2
  67. package/dist/core/json.d.ts +0 -11
  68. package/dist/core/json.d.ts.map +0 -1
  69. package/dist/core/json.js +0 -14
  70. package/dist/core/json.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/core/builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI1D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,EAAE,MAAM,CAIrE,CAAC;AAIF,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACtB;AAID;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzF;AAID;;;GAGG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAa3F;AAID;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B7F;AAID,MAAM,WAAW,qBAAqB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAChC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,qBAA0B,GACpC,OAAO,CAAC,YAAY,CAAC,CAWvB"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/core/builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK1D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,EAAE,MAAM,CAIrE,CAAC;AAIF,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACtB;AAID;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzF;AAID;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAY3F;AAID;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G;AAID,MAAM,WAAW,qBAAqB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAChC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,qBAA0B,GACpC,OAAO,CAAC,YAAY,CAAC,CAWvB"}
@@ -1,5 +1,6 @@
1
1
  import { homedir } from "node:os";
2
- import { basename, join } from "node:path";
2
+ import { join } from "node:path";
3
+ import { killDiscordProcesses } from "./discord.js";
3
4
  // ─── Deploy Paths ─────────────────────────────────────────────────────────────
4
5
  export const DEPLOY_PATHS = {
5
6
  linux: join(homedir(), ".config", "Vencord", "dist"),
@@ -20,14 +21,17 @@ export async function buildVencord(shell, vencordPath) {
20
21
  // ─── Deploy ───────────────────────────────────────────────────────────────────
21
22
  /**
22
23
  * Copy `<vencordPath>/dist/` to the platform-specific deployed location.
23
- * Skips silently when the deployed directory does not exist on disk.
24
+ *
25
+ * Creates the deploy directory if it doesn't exist. Previous behaviour was to
26
+ * skip silently when the directory was missing, which required users to run
27
+ * Vencord's own installer first to bootstrap it. On macOS Apple Silicon that
28
+ * installer is x86-only and often fails, so we make `rebuild` self-sufficient.
24
29
  */
25
30
  export async function deployDist(fs, vencordPath) {
26
31
  const platform = process.platform;
27
32
  const deployPath = DEPLOY_PATHS[platform] ?? DEPLOY_PATHS.linux;
28
- const deployedDirExists = await fs.exists(deployPath);
29
- if (!deployedDirExists) {
30
- return { deployed: false, restarted: false };
33
+ if (!(await fs.exists(deployPath))) {
34
+ await fs.mkdir(deployPath, { recursive: true });
31
35
  }
32
36
  const srcDist = join(vencordPath, "dist");
33
37
  await fs.copyDir(srcDist, deployPath);
@@ -35,30 +39,13 @@ export async function deployDist(fs, vencordPath) {
35
39
  }
36
40
  // ─── Restart ──────────────────────────────────────────────────────────────────
37
41
  /**
38
- * Kill Discord via `pkill`, wait briefly, then spawn the binary detached.
39
- * If pkill reports the process is not running (exit code 1) the kill step is
40
- * skipped Discord is still spawned so the caller can open it fresh.
42
+ * Kill all running Discord processes, wait for confirmed exit, then spawn
43
+ * the binary detached. Uses `/proc/<pid>/exe`-based discovery so only
44
+ * verified Discord binaries are killed (no stray processes). SIGTERM is
45
+ * tried first; survivors are escalated to SIGKILL.
41
46
  */
42
- export async function restartDiscord(shell, discordBinary) {
43
- const processName = basename(discordBinary);
44
- if (process.platform === "win32") {
45
- // taskkill /IM matches image name; /F forces termination.
46
- // Exit code 128 = process not found (not an error for us).
47
- const killResult = await shell.exec("taskkill", ["/IM", `${processName}.exe`, "/F"]);
48
- if (killResult.exitCode !== 0 && killResult.exitCode !== 128) {
49
- throw new Error(`taskkill failed (exit ${killResult.exitCode}): ${killResult.stderr}`);
50
- }
51
- }
52
- else {
53
- // pkill returns 0 if at least one process was signalled, 1 if none found.
54
- // -x = exact name match, -i = case-insensitive (binary is "discord", comm is "Discord").
55
- const killResult = await shell.exec("pkill", ["-xi", processName]);
56
- if (killResult.exitCode !== 0 && killResult.exitCode !== 1) {
57
- throw new Error(`pkill failed (exit ${killResult.exitCode}): ${killResult.stderr}`);
58
- }
59
- }
60
- // Give the process a moment to fully exit before relaunching.
61
- await new Promise(resolve => setTimeout(resolve, 500));
47
+ export async function restartDiscord(fs, shell, discordBinary) {
48
+ await killDiscordProcesses(fs, shell, discordBinary);
62
49
  await shell.spawn(discordBinary, [], { detached: true });
63
50
  }
64
51
  /**
@@ -68,7 +55,7 @@ export async function buildAndDeploy(fs, shell, vencordPath, options = {}) {
68
55
  await buildVencord(shell, vencordPath);
69
56
  const result = await deployDist(fs, vencordPath);
70
57
  if (options.restart && options.discordBinary) {
71
- await restartDiscord(shell, options.discordBinary);
58
+ await restartDiscord(fs, shell, options.discordBinary);
72
59
  result.restarted = true;
73
60
  }
74
61
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/core/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/core/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,iFAAiF;AAEjF,MAAM,CAAC,MAAM,YAAY,GAAiD;IACtE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IACpD,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,CAAC;IAC5E,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC;CAC/F,CAAC;AAUF,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAkB,EAAE,WAAmB;IACtE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IACzE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACX,2BAA2B,MAAM,CAAC,QAAQ,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CACpF,CAAC;IACN,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAc,EAAE,WAAmB;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAwC,CAAC;IAClE,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC;IAEhE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAc,EAAE,KAAkB,EAAE,aAAqB;IAC1F,MAAM,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACrD,MAAM,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC;AASD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,EAAc,EACd,KAAkB,EAClB,WAAmB,EACnB,UAAiC,EAAE;IAEnC,MAAM,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,gBAAgB,qFAAqF,CAAC;AAEnH,eAAO,MAAM,cAAc,EAAE,MAK5B,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAU5D;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpF;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlG"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,gBAAgB,qFAAqF,CAAC;AAEnH,eAAO,MAAM,cAAc,EAAE,MAK5B,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAU5D;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYpF;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlG"}
@@ -22,7 +22,14 @@ export async function loadConfig(fs, configPath) {
22
22
  if (!exists)
23
23
  return { ...DEFAULT_CONFIG };
24
24
  const raw = await fs.readFile(configPath, "utf-8");
25
- const parsed = JSON.parse(raw);
25
+ let parsed;
26
+ try {
27
+ parsed = JSON.parse(raw);
28
+ }
29
+ catch {
30
+ process.stderr.write(`Warning: Failed to parse config at ${configPath}, using defaults\n`);
31
+ return { ...DEFAULT_CONFIG };
32
+ }
26
33
  return mergeConfig(parsed);
27
34
  }
28
35
  export async function saveConfig(fs, configPath, config) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,kFAAkF,CAAC;AAEnH,MAAM,CAAC,MAAM,cAAc,GAAW;IAClC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;IACnD,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACvB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;CAC5C,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,OAAwB;IAChD,OAAO;QACH,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK;QAC5C,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE;QACvE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO;QAClD,OAAO,EAAE;YACL,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO;YACnE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM;SACnE;KACJ,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAc,EAAE,UAAkB;IAC/D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IAClD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAc,EAAE,UAAkB,EAAE,MAAc;IAC/E,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,kFAAkF,CAAC;AAEnH,MAAM,CAAC,MAAM,cAAc,GAAW;IAClC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;IACnD,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACvB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;CAC5C,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,OAAwB;IAChD,OAAO;QACH,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK;QAC5C,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE;QACvE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO;QAClD,OAAO,EAAE;YACL,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO;YACnE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM;SACnE;KACJ,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAc,EAAE,UAAkB;IAC/D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,MAAuB,CAAC;IAC5B,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,UAAU,oBAAoB,CAAC,CAAC;QAC3F,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAc,EAAE,UAAkB,EAAE,MAAc;IAC/E,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { FileSystem, ShellRunner } from "./types.js";
2
+ export interface DiscordProcess {
3
+ pid: number;
4
+ exe: string;
5
+ }
6
+ export interface KillResult {
7
+ found: DiscordProcess[];
8
+ killed: number[];
9
+ forced: number[];
10
+ }
11
+ /**
12
+ * Check whether a resolved binary path belongs to a Discord installation.
13
+ * Matches against known install locations + the user's configured binary.
14
+ */
15
+ export declare function isDiscordBinary(resolvedPath: string, configuredBinary?: string | null): boolean;
16
+ /**
17
+ * Find running Discord processes on Linux by inspecting `/proc/<pid>/exe`.
18
+ * Only returns processes whose binary resolves to a known Discord path.
19
+ *
20
+ * On non-Linux platforms, falls back to `ps` output parsing (macOS) or
21
+ * returns an empty array (Windows — handled separately by the caller).
22
+ */
23
+ export declare function findDiscordProcesses(fs: FileSystem, shell: ShellRunner, configuredBinary?: string | null): Promise<DiscordProcess[]>;
24
+ /**
25
+ * Kill all running Discord processes with SIGTERM → wait → SIGKILL escalation.
26
+ *
27
+ * 1. Discovers processes via `/proc/<pid>/exe` (Linux) or `ps` (macOS)
28
+ * 2. Sends SIGTERM to all matching PIDs
29
+ * 3. Waits up to 5 s for graceful exit (polling every 250 ms)
30
+ * 4. Sends SIGKILL to any survivors
31
+ * 5. Waits up to 2 s for forced exit
32
+ *
33
+ * On Windows, falls back to `taskkill /F` against the configured binary name.
34
+ */
35
+ export declare function killDiscordProcesses(fs: FileSystem, shell: ShellRunner, configuredBinary?: string | null): Promise<KillResult>;
36
+ //# sourceMappingURL=discord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/core/discord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI1D,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAgCD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAG/F;AAID;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACtC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,WAAW,EAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GACjC,OAAO,CAAC,cAAc,EAAE,CAAC,CAQ3B;AAkGD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACtC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,WAAW,EAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GACjC,OAAO,CAAC,UAAU,CAAC,CA8BrB"}
@@ -0,0 +1,183 @@
1
+ // ─── Binary Allowlist ────────────────────────────────────────────────────────
2
+ /**
3
+ * Patterns matched against the resolved `/proc/<pid>/exe` path.
4
+ * These target the ACTUAL binaries (not wrapper scripts), since the
5
+ * kernel resolves through symlinks and script interpreters.
6
+ */
7
+ const DISCORD_EXE_PATTERNS = [
8
+ // Standard Linux package installs (/opt/discord/Discord, /opt/discord-canary/DiscordCanary, etc.)
9
+ /^\/opt\/[Dd]iscord[^/]*\/[Dd]iscord/,
10
+ /^\/usr\/lib\/discord[^/]*\/[Dd]iscord/,
11
+ /^\/usr\/share\/discord[^/]*\/[Dd]iscord/,
12
+ // Vesktop
13
+ /^\/opt\/[Vv]esktop[^/]*\/[Vv]esktop/,
14
+ /^\/usr\/lib\/vesktop[^/]*\/[Vv]esktop/,
15
+ /^\/usr\/share\/vesktop[^/]*\/[Vv]esktop/,
16
+ // Wrapper scripts that are themselves valid executables
17
+ /^\/usr\/bin\/discord(?:-canary|-ptb)?$/,
18
+ /^\/usr\/bin\/vesktop$/,
19
+ // Flatpak
20
+ /\/app\/bin\/[Dd]iscord/,
21
+ /\/app\/bin\/[Vv]esktop/,
22
+ // Snap
23
+ /^\/snap\/discord\//,
24
+ /^\/snap\/vesktop\//,
25
+ // macOS
26
+ /^\/Applications\/Discord[^/]*\.app\/Contents\/MacOS\//,
27
+ /^\/Applications\/Vesktop\.app\/Contents\/MacOS\//,
28
+ ];
29
+ /**
30
+ * Check whether a resolved binary path belongs to a Discord installation.
31
+ * Matches against known install locations + the user's configured binary.
32
+ */
33
+ export function isDiscordBinary(resolvedPath, configuredBinary) {
34
+ if (configuredBinary && resolvedPath === configuredBinary)
35
+ return true;
36
+ return DISCORD_EXE_PATTERNS.some(p => p.test(resolvedPath));
37
+ }
38
+ // ─── Process Discovery ──────────────────────────────────────────────────────
39
+ /**
40
+ * Find running Discord processes on Linux by inspecting `/proc/<pid>/exe`.
41
+ * Only returns processes whose binary resolves to a known Discord path.
42
+ *
43
+ * On non-Linux platforms, falls back to `ps` output parsing (macOS) or
44
+ * returns an empty array (Windows — handled separately by the caller).
45
+ */
46
+ export async function findDiscordProcesses(fs, shell, configuredBinary) {
47
+ if (process.platform === "linux") {
48
+ return findDiscordProcessesLinux(fs, configuredBinary);
49
+ }
50
+ if (process.platform === "darwin") {
51
+ return findDiscordProcessesMacOS(shell, configuredBinary);
52
+ }
53
+ return [];
54
+ }
55
+ async function findDiscordProcessesLinux(fs, configuredBinary) {
56
+ let entries;
57
+ try {
58
+ entries = await fs.readdir("/proc");
59
+ }
60
+ catch {
61
+ return [];
62
+ }
63
+ const processes = [];
64
+ for (const entry of entries) {
65
+ const pid = parseInt(entry, 10);
66
+ if (isNaN(pid) || pid <= 0)
67
+ continue;
68
+ try {
69
+ const exe = await fs.readlink(`/proc/${pid}/exe`);
70
+ if (isDiscordBinary(exe, configuredBinary)) {
71
+ processes.push({ pid, exe });
72
+ }
73
+ }
74
+ catch {
75
+ // EACCES (other user), ENOENT (process exited), etc. — skip.
76
+ continue;
77
+ }
78
+ }
79
+ return processes;
80
+ }
81
+ async function findDiscordProcessesMacOS(shell, configuredBinary) {
82
+ const result = await shell.exec("ps", ["-eo", "pid=,args="]);
83
+ if (result.exitCode !== 0)
84
+ return [];
85
+ const processes = [];
86
+ for (const line of result.stdout.split("\n")) {
87
+ const trimmed = line.trim();
88
+ if (!trimmed)
89
+ continue;
90
+ const spaceIdx = trimmed.indexOf(" ");
91
+ if (spaceIdx === -1)
92
+ continue;
93
+ const pid = parseInt(trimmed.slice(0, spaceIdx), 10);
94
+ if (isNaN(pid))
95
+ continue;
96
+ const exe = trimmed.slice(spaceIdx + 1).trim().split(" ")[0];
97
+ if (isDiscordBinary(exe, configuredBinary)) {
98
+ processes.push({ pid, exe });
99
+ }
100
+ }
101
+ return processes;
102
+ }
103
+ // ─── Process Liveness ────────────────────────────────────────────────────────
104
+ async function isProcessAlive(fs, shell, pid) {
105
+ if (process.platform === "linux") {
106
+ return fs.exists(`/proc/${pid}`);
107
+ }
108
+ // macOS / others: kill -0 checks existence without sending a signal.
109
+ const result = await shell.exec("kill", ["-0", String(pid)]);
110
+ return result.exitCode === 0;
111
+ }
112
+ /**
113
+ * Poll until all PIDs have exited, or the timeout expires.
114
+ * Returns PIDs that are still alive after the deadline.
115
+ */
116
+ async function waitForExit(fs, shell, pids, timeoutMs, pollMs = 250) {
117
+ const deadline = Date.now() + timeoutMs;
118
+ let remaining = [...pids];
119
+ while (remaining.length > 0 && Date.now() < deadline) {
120
+ await new Promise(r => setTimeout(r, pollMs));
121
+ const alive = [];
122
+ for (const pid of remaining) {
123
+ if (await isProcessAlive(fs, shell, pid)) {
124
+ alive.push(pid);
125
+ }
126
+ }
127
+ remaining = alive;
128
+ }
129
+ return remaining;
130
+ }
131
+ // ─── Kill ────────────────────────────────────────────────────────────────────
132
+ /**
133
+ * Kill all running Discord processes with SIGTERM → wait → SIGKILL escalation.
134
+ *
135
+ * 1. Discovers processes via `/proc/<pid>/exe` (Linux) or `ps` (macOS)
136
+ * 2. Sends SIGTERM to all matching PIDs
137
+ * 3. Waits up to 5 s for graceful exit (polling every 250 ms)
138
+ * 4. Sends SIGKILL to any survivors
139
+ * 5. Waits up to 2 s for forced exit
140
+ *
141
+ * On Windows, falls back to `taskkill /F` against the configured binary name.
142
+ */
143
+ export async function killDiscordProcesses(fs, shell, configuredBinary) {
144
+ // Windows fallback — no /proc, no ps.
145
+ if (process.platform === "win32") {
146
+ return killDiscordProcessesWin32(shell, configuredBinary);
147
+ }
148
+ const found = await findDiscordProcesses(fs, shell, configuredBinary);
149
+ if (found.length === 0) {
150
+ return { found: [], killed: [], forced: [] };
151
+ }
152
+ const pids = found.map(p => p.pid);
153
+ // SIGTERM
154
+ await shell.exec("kill", ["-TERM", ...pids.map(String)]);
155
+ // Wait for graceful shutdown
156
+ const survivorsAfterTerm = await waitForExit(fs, shell, pids, 5000);
157
+ const killed = pids.filter(p => !survivorsAfterTerm.includes(p));
158
+ // SIGKILL survivors
159
+ let forced = [];
160
+ if (survivorsAfterTerm.length > 0) {
161
+ await shell.exec("kill", ["-KILL", ...survivorsAfterTerm.map(String)]);
162
+ const survivorsAfterKill = await waitForExit(fs, shell, survivorsAfterTerm, 2000);
163
+ forced = survivorsAfterTerm.filter(p => !survivorsAfterKill.includes(p));
164
+ }
165
+ return { found, killed, forced };
166
+ }
167
+ async function killDiscordProcessesWin32(shell, configuredBinary) {
168
+ // Best-effort: kill known image names.
169
+ const imageNames = ["Discord.exe", "DiscordCanary.exe", "DiscordPTB.exe", "Vesktop.exe"];
170
+ if (configuredBinary) {
171
+ const base = configuredBinary.split(/[/\\]/).pop();
172
+ if (base && !imageNames.includes(base)) {
173
+ imageNames.push(base);
174
+ }
175
+ }
176
+ for (const name of imageNames) {
177
+ // taskkill /F /IM — exit 128 means "no such process", which is fine.
178
+ await shell.exec("taskkill", ["/F", "/IM", name]);
179
+ }
180
+ // Can't reliably introspect PIDs on Windows via IOContext, so return minimal info.
181
+ return { found: [], killed: [], forced: [] };
182
+ }
183
+ //# sourceMappingURL=discord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../src/core/discord.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,10 @@ export declare const ErrorCode: {
19
19
  readonly BUILD_FAILED: "BUILD_FAILED";
20
20
  readonly DISCORD_NOT_FOUND: "DISCORD_NOT_FOUND";
21
21
  readonly NON_INTERACTIVE: "NON_INTERACTIVE";
22
+ readonly INJECT_FAILED: "INJECT_FAILED";
23
+ readonly ALREADY_INJECTED: "ALREADY_INJECTED";
24
+ readonly NOT_INJECTED: "NOT_INJECTED";
25
+ readonly PLATFORM_UNSUPPORTED: "PLATFORM_UNSUPPORTED";
22
26
  };
23
27
  export type ErrorCodeValue = typeof ErrorCode[keyof typeof ErrorCode];
24
28
  export declare const ExitCode: {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;CAcZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAkBtE,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAW7D;AAED,wBAAgB,SAAS,CACrB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,SAAS,CAsBX"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;CAkBZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAsBtE,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAY7D;AAED,wBAAgB,SAAS,CACrB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,SAAS,CAsBX"}
@@ -12,6 +12,10 @@ export const ErrorCode = {
12
12
  BUILD_FAILED: "BUILD_FAILED",
13
13
  DISCORD_NOT_FOUND: "DISCORD_NOT_FOUND",
14
14
  NON_INTERACTIVE: "NON_INTERACTIVE",
15
+ INJECT_FAILED: "INJECT_FAILED",
16
+ ALREADY_INJECTED: "ALREADY_INJECTED",
17
+ NOT_INJECTED: "NOT_INJECTED",
18
+ PLATFORM_UNSUPPORTED: "PLATFORM_UNSUPPORTED",
15
19
  };
16
20
  const DEFAULT_SUGGESTIONS = {
17
21
  VENCORD_NOT_FOUND: "Run: venpm config set vencord.path /path/to/Vencord",
@@ -27,6 +31,10 @@ const DEFAULT_SUGGESTIONS = {
27
31
  BUILD_FAILED: "Run: venpm doctor to check your environment",
28
32
  DISCORD_NOT_FOUND: "Set: venpm config set discord.binary /path/to/discord",
29
33
  NON_INTERACTIVE: "Use --yes to auto-confirm, or set config explicitly",
34
+ INJECT_FAILED: "Run: venpm inject --verbose to see details",
35
+ ALREADY_INJECTED: "Run: venpm uninject to remove the existing patch",
36
+ NOT_INJECTED: "Run: venpm inject to patch Discord",
37
+ PLATFORM_UNSUPPORTED: "Native inject is currently macOS-only; fall back to Vencord's pnpm inject on other platforms",
30
38
  };
31
39
  export const ExitCode = {
32
40
  SUCCESS: 0,
@@ -41,6 +49,7 @@ export function exitCodeForError(code) {
41
49
  case ErrorCode.PNPM_NOT_AVAILABLE:
42
50
  case ErrorCode.BUILD_FAILED:
43
51
  case ErrorCode.DISCORD_NOT_FOUND:
52
+ case ErrorCode.PLATFORM_UNSUPPORTED:
44
53
  return ExitCode.ENV_ERROR;
45
54
  default:
46
55
  return ExitCode.COMMAND_ERROR;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,oBAAoB,EAAE,sBAAsB;IAC5C,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IACtC,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;CAC5B,CAAC;AAIX,MAAM,mBAAmB,GAA2B;IAChD,iBAAiB,EAAE,qDAAqD;IACxE,gBAAgB,EAAE,qDAAqD;IACvE,gBAAgB,EAAE,+CAA+C;IACjE,oBAAoB,EAAE,0CAA0C;IAChE,iBAAiB,EAAE,iCAAiC;IACpD,iBAAiB,EAAE,+BAA+B;IAClD,kBAAkB,EAAE,6BAA6B;IACjD,mBAAmB,EAAE,mCAAmC;IACxD,iBAAiB,EAAE,oDAAoD;IACvE,cAAc,EAAE,kDAAkD;IAClE,YAAY,EAAE,6CAA6C;IAC3D,iBAAiB,EAAE,uDAAuD;IAC1E,eAAe,EAAE,qDAAqD;CACzE,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,CAAC;IACd,SAAS,EAAE,CAAC;CACN,CAAC;AAEX,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACjD,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,SAAS,CAAC,iBAAiB,CAAC;QACjC,KAAK,SAAS,CAAC,iBAAiB,CAAC;QACjC,KAAK,SAAS,CAAC,kBAAkB,CAAC;QAClC,KAAK,SAAS,CAAC,YAAY,CAAC;QAC5B,KAAK,SAAS,CAAC,iBAAiB;YAC5B,OAAO,QAAQ,CAAC,SAAS,CAAC;QAC9B;YACI,OAAO,QAAQ,CAAC,aAAa,CAAC;IACtC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,SAAS,CACrB,IAAoB,EACpB,OAAe,EACf,OAA0E;IAE1E,IAAI,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IAErC,IAAI,CAAC,UAAU,IAAI,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,UAAU,GAAG,iBAAiB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,CAAC;aAAM,CAAC;YACJ,UAAU,GAAG,wBAAwB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,CAAC;IACL,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACH,IAAI;QACJ,OAAO;QACP,UAAU;QACV,UAAU,EAAE,OAAO,EAAE,UAAU;QAC/B,OAAO,EAAE,OAAO,EAAE,OAAO;KAC5B,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,oBAAoB,EAAE,sBAAsB;IAC5C,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IACtC,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,aAAa,EAAE,eAAe;IAC9B,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,cAAc;IAC5B,oBAAoB,EAAE,sBAAsB;CACtC,CAAC;AAIX,MAAM,mBAAmB,GAA2B;IAChD,iBAAiB,EAAE,qDAAqD;IACxE,gBAAgB,EAAE,qDAAqD;IACvE,gBAAgB,EAAE,+CAA+C;IACjE,oBAAoB,EAAE,0CAA0C;IAChE,iBAAiB,EAAE,iCAAiC;IACpD,iBAAiB,EAAE,+BAA+B;IAClD,kBAAkB,EAAE,6BAA6B;IACjD,mBAAmB,EAAE,mCAAmC;IACxD,iBAAiB,EAAE,oDAAoD;IACvE,cAAc,EAAE,kDAAkD;IAClE,YAAY,EAAE,6CAA6C;IAC3D,iBAAiB,EAAE,uDAAuD;IAC1E,eAAe,EAAE,qDAAqD;IACtE,aAAa,EAAE,4CAA4C;IAC3D,gBAAgB,EAAE,kDAAkD;IACpE,YAAY,EAAE,oCAAoC;IAClD,oBAAoB,EAAE,8FAA8F;CACvH,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,CAAC;IACd,SAAS,EAAE,CAAC;CACN,CAAC;AAEX,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACjD,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,SAAS,CAAC,iBAAiB,CAAC;QACjC,KAAK,SAAS,CAAC,iBAAiB,CAAC;QACjC,KAAK,SAAS,CAAC,kBAAkB,CAAC;QAClC,KAAK,SAAS,CAAC,YAAY,CAAC;QAC5B,KAAK,SAAS,CAAC,iBAAiB,CAAC;QACjC,KAAK,SAAS,CAAC,oBAAoB;YAC/B,OAAO,QAAQ,CAAC,SAAS,CAAC;QAC9B;YACI,OAAO,QAAQ,CAAC,aAAa,CAAC;IACtC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,SAAS,CACrB,IAAoB,EACpB,OAAe,EACf,OAA0E;IAE1E,IAAI,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IAErC,IAAI,CAAC,UAAU,IAAI,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,UAAU,GAAG,iBAAiB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,CAAC;aAAM,CAAC;YACJ,UAAU,GAAG,wBAAwB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,CAAC;IACL,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACH,IAAI;QACJ,OAAO;QACP,UAAU;QACV,UAAU,EAAE,OAAO,EAAE,UAAU;QAC/B,OAAO,EAAE,OAAO,EAAE,OAAO;KAC5B,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/core/fetcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAsB,WAAW,CAC7B,GAAG,EAAE,SAAS,EACd,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,WAAW,CAAC,CAoCtB;AAID,wBAAsB,eAAe,CACjC,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAkBtB;AAID,wBAAsB,aAAa,CAC/B,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAUtB;AAID,wBAAsB,WAAW,CAC7B,KAAK,EAAE,gBAAgB,EACvB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC1D,OAAO,CAAC,WAAW,CAAC,CAqCtB"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/core/fetcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAsB,WAAW,CAC7B,GAAG,EAAE,SAAS,EACd,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,WAAW,CAAC,CAoCtB;AAID,wBAAsB,eAAe,CACjC,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAqBtB;AAID,wBAAsB,aAAa,CAC/B,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAUtB;AAID,wBAAsB,WAAW,CAC7B,KAAK,EAAE,gBAAgB,EACvB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC1D,OAAO,CAAC,WAAW,CAAC,CAqCtB"}
@@ -41,8 +41,12 @@ export async function fetchViaTarball(http, fs, tarballUrl, dest) {
41
41
  const tmpPath = join(tmpdir(), `venpm-tarball-${randomUUID()}.tar.gz`);
42
42
  await writeFileRaw(tmpPath, buffer);
43
43
  await fs.mkdir(dest, { recursive: true });
44
- await extract({ file: tmpPath, cwd: dest, strip: 1 });
45
- await unlink(tmpPath);
44
+ try {
45
+ await extract({ file: tmpPath, cwd: dest, strip: 1 });
46
+ }
47
+ finally {
48
+ await unlink(tmpPath).catch(() => { });
49
+ }
46
50
  return { method: "tarball" };
47
51
  }
48
52
  // ─── fetchViaLocal ────────────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/core/fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/core/fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { FileSystem } from "./types.js";
2
+ export type DiscordBranch = "stable" | "canary" | "ptb";
3
+ export declare const DISCORD_BRANCHES: DiscordBranch[];
4
+ export interface InjectTarget {
5
+ branch: DiscordBranch;
6
+ appPath: string;
7
+ platform: NodeJS.Platform;
8
+ }
9
+ export interface InjectStatus {
10
+ injected: boolean;
11
+ /** True when Resources/app.asar exists (either original or our shim). */
12
+ asarPresent: boolean;
13
+ /** True when Resources/_app.asar (Discord's renamed original) exists. */
14
+ backupPresent: boolean;
15
+ /** True when a legacy Resources/app/ directory shim exists. */
16
+ legacyShimDirPresent: boolean;
17
+ }
18
+ export interface InjectResult {
19
+ branch: DiscordBranch;
20
+ appPath: string;
21
+ shimAsar: string;
22
+ backupPath: string;
23
+ }
24
+ export declare class InjectError extends Error {
25
+ code: InjectErrorCode;
26
+ constructor(code: InjectErrorCode, message: string);
27
+ }
28
+ export type InjectErrorCode = "PLATFORM_UNSUPPORTED" | "DISCORD_NOT_FOUND" | "ALREADY_INJECTED" | "NOT_INJECTED" | "INJECT_FAILED";
29
+ /**
30
+ * Discover installed Discord branches on the current platform.
31
+ *
32
+ * On unsupported platforms, returns an empty array. Callers should treat
33
+ * that as "not supported" rather than "none installed".
34
+ */
35
+ export declare function detectDiscordApps(fs: FileSystem, platform?: NodeJS.Platform): Promise<InjectTarget[]>;
36
+ /**
37
+ * Inspect an on-disk Discord.app and report injection status. Does not
38
+ * modify anything. Returns a detailed breakdown so callers can decide
39
+ * whether to re-inject, warn, or abort.
40
+ */
41
+ export declare function getInjectStatus(fs: FileSystem, target: InjectTarget): Promise<InjectStatus>;
42
+ /**
43
+ * Patch a Discord.app so Electron loads Vencord's patcher before the
44
+ * original asar. Uses the asar-shim layout:
45
+ *
46
+ * 1. Rename Discord's app.asar → _app.asar
47
+ * 2. Pack a shim asar (package.json + index.js) and place it at app.asar
48
+ *
49
+ * Also cleans up legacy plain-directory shims from older venpm versions.
50
+ *
51
+ * On failure during shim packing, the rename is rolled back so the next
52
+ * Discord launch reverts cleanly to stock behaviour.
53
+ */
54
+ export declare function injectVencord(fs: FileSystem, target: InjectTarget): Promise<InjectResult>;
55
+ /**
56
+ * Reverse an inject: remove the shim asar, rename backup back to app.asar.
57
+ * Also cleans up any legacy plain-directory shim.
58
+ */
59
+ export declare function uninjectVencord(fs: FileSystem, target: InjectTarget): Promise<InjectResult>;
60
+ //# sourceMappingURL=inject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/core/inject.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAAgC,CAAC;AAe7E,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,aAAa,EAAE,OAAO,CAAC;IACvB,+DAA+D;IAC/D,oBAAoB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAY,SAAQ,KAAK;IACf,IAAI,EAAE,eAAe;gBAArB,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM;CAI5D;AAED,MAAM,MAAM,eAAe,GACrB,sBAAsB,GACtB,mBAAmB,GACnB,kBAAkB,GAClB,cAAc,GACd,eAAe,CAAC;AAmCtB;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACnC,EAAE,EAAE,UAAU,EACd,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC7C,OAAO,CAAC,YAAY,EAAE,CAAC,CAWzB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACjC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,YAAY,GACrB,OAAO,CAAC,YAAY,CAAC,CAoBvB;AA6CD;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAC/B,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,YAAY,GACrB,OAAO,CAAC,YAAY,CAAC,CAoEvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACjC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,YAAY,GACrB,OAAO,CAAC,YAAY,CAAC,CAuCvB"}