@solongate/proxy 0.26.1 → 0.26.3

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/init.js CHANGED
@@ -4,8 +4,40 @@
4
4
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
5
  import { resolve, join, dirname } from "path";
6
6
  import { fileURLToPath } from "url";
7
- import { execSync } from "child_process";
7
+ import { execFileSync } from "child_process";
8
8
  import { createInterface } from "readline";
9
+
10
+ // src/cli-utils.ts
11
+ var c = {
12
+ reset: "\x1B[0m",
13
+ bold: "\x1B[1m",
14
+ dim: "\x1B[2m",
15
+ italic: "\x1B[3m",
16
+ white: "\x1B[97m",
17
+ gray: "\x1B[90m",
18
+ blue1: "\x1B[38;2;20;50;160m",
19
+ blue2: "\x1B[38;2;40;80;190m",
20
+ blue3: "\x1B[38;2;60;110;215m",
21
+ blue4: "\x1B[38;2;90;140;230m",
22
+ blue5: "\x1B[38;2;130;170;240m",
23
+ blue6: "\x1B[38;2;170;200;250m",
24
+ green: "\x1B[38;2;80;200;120m",
25
+ red: "\x1B[38;2;220;80;80m",
26
+ cyan: "\x1B[38;2;100;200;220m",
27
+ yellow: "\x1B[38;2;220;200;80m",
28
+ bgBlue: "\x1B[48;2;20;50;160m"
29
+ };
30
+ var BANNER_FULL = [
31
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
32
+ " \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
33
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
34
+ " \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
35
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
36
+ " \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
37
+ ];
38
+ var BANNER_COLORS = [c.blue1, c.blue2, c.blue3, c.blue4, c.blue5, c.blue6];
39
+
40
+ // src/init.ts
9
41
  var SEARCH_PATHS = [
10
42
  ".mcp.json",
11
43
  "mcp.json",
@@ -177,19 +209,19 @@ function unlockProtectedDirs() {
177
209
  try {
178
210
  if (process.platform === "win32") {
179
211
  try {
180
- execSync(`powershell.exe -Command "icacls '${fullDir}' /remove:d '*S-1-1-0' /T /Q"`, { stdio: "ignore" });
212
+ execFileSync("icacls", [fullDir, "/remove:d", "*S-1-1-0", "/T", "/Q"], { stdio: "ignore" });
181
213
  } catch {
182
214
  }
183
215
  try {
184
- execSync(`attrib -R /S /D "${fullDir}"`, { stdio: "ignore" });
216
+ execFileSync("attrib", ["-R", "/S", "/D", fullDir], { stdio: "ignore" });
185
217
  } catch {
186
218
  }
187
219
  } else {
188
220
  try {
189
- execSync(`chattr -i -R "${fullDir}"`, { stdio: "ignore" });
221
+ execFileSync("chattr", ["-i", "-R", fullDir], { stdio: "ignore" });
190
222
  } catch {
191
223
  }
192
- execSync(`chmod -R u+w "${fullDir}"`, { stdio: "ignore" });
224
+ execFileSync("chmod", ["-R", "u+w", fullDir], { stdio: "ignore" });
193
225
  }
194
226
  } catch {
195
227
  }
@@ -201,19 +233,19 @@ function unlockProtectedDirs() {
201
233
  try {
202
234
  if (process.platform === "win32") {
203
235
  try {
204
- execSync(`powershell.exe -Command "icacls '${fullPath}' /remove:d '*S-1-1-0' /Q"`, { stdio: "ignore" });
236
+ execFileSync("icacls", [fullPath, "/remove:d", "*S-1-1-0", "/Q"], { stdio: "ignore" });
205
237
  } catch {
206
238
  }
207
239
  try {
208
- execSync(`attrib -R "${fullPath}"`, { stdio: "ignore" });
240
+ execFileSync("attrib", ["-R", fullPath], { stdio: "ignore" });
209
241
  } catch {
210
242
  }
211
243
  } else {
212
244
  try {
213
- execSync(`chattr -i "${fullPath}"`, { stdio: "ignore" });
245
+ execFileSync("chattr", ["-i", fullPath], { stdio: "ignore" });
214
246
  } catch {
215
247
  }
216
- execSync(`chmod u+w "${fullPath}"`, { stdio: "ignore" });
248
+ execFileSync("chmod", ["u+w", fullPath], { stdio: "ignore" });
217
249
  }
218
250
  } catch {
219
251
  }
@@ -257,7 +289,7 @@ function installHooks(selectedTools = []) {
257
289
  { name: "OpenClaw", dir: ".openclaw", key: "openclaw" },
258
290
  { name: "Perplexity", dir: ".perplexity", key: "perplexity" }
259
291
  ];
260
- const clients = selectedTools.length > 0 ? allClients.filter((c) => selectedTools.includes(c.key)) : allClients;
292
+ const clients = selectedTools.length > 0 ? allClients.filter((c2) => selectedTools.includes(c2.key)) : allClients;
261
293
  const activatedNames = [];
262
294
  for (const client of clients) {
263
295
  const clientDir = resolve(client.dir);
@@ -320,26 +352,7 @@ GROQ_API_KEY=gsk_your_groq_key_here
320
352
  }
321
353
  async function main() {
322
354
  const options = parseInitArgs(process.argv);
323
- const _c = {
324
- reset: "\x1B[0m",
325
- bold: "\x1B[1m",
326
- dim: "\x1B[2m",
327
- italic: "\x1B[3m",
328
- blue1: "\x1B[38;2;20;50;160m",
329
- blue2: "\x1B[38;2;40;80;190m",
330
- blue3: "\x1B[38;2;60;110;215m",
331
- blue4: "\x1B[38;2;90;140;230m",
332
- blue5: "\x1B[38;2;130;170;240m",
333
- blue6: "\x1B[38;2;170;200;250m"
334
- };
335
- const fullBanner = [
336
- " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
337
- " \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
338
- " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
339
- " \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
340
- " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
341
- " \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
342
- ];
355
+ const fullBanner = BANNER_FULL;
343
356
  const mediumBanner = [
344
357
  " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557",
345
358
  " \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551",
@@ -366,13 +379,13 @@ async function main() {
366
379
  ];
367
380
  const cols = process.stdout.columns || 80;
368
381
  const bannerLines = cols >= 82 ? fullBanner : cols >= 50 ? mediumBanner : smallBanner;
369
- const bannerColors = [_c.blue1, _c.blue2, _c.blue3, _c.blue4, _c.blue5, _c.blue6];
382
+ const bannerColors = BANNER_COLORS;
370
383
  console.log("");
371
384
  for (let i = 0; i < bannerLines.length; i++) {
372
- console.log(`${_c.bold}${bannerColors[i % bannerColors.length]}${bannerLines[i]}${_c.reset}`);
385
+ console.log(`${c.bold}${bannerColors[i % bannerColors.length]}${bannerLines[i]}${c.reset}`);
373
386
  }
374
387
  console.log("");
375
- console.log(` ${_c.dim}${_c.italic}Init Setup${_c.reset}`);
388
+ console.log(` ${c.dim}${c.italic}Init Setup${c.reset}`);
376
389
  console.log("");
377
390
  await sleep(400);
378
391
  const configInfo = findConfigFile(options.configPath, true);
package/dist/inject.js CHANGED
@@ -4,6 +4,50 @@
4
4
  import { readFileSync, writeFileSync, existsSync, copyFileSync } from "fs";
5
5
  import { resolve } from "path";
6
6
  import { execSync } from "child_process";
7
+
8
+ // src/cli-utils.ts
9
+ var c = {
10
+ reset: "\x1B[0m",
11
+ bold: "\x1B[1m",
12
+ dim: "\x1B[2m",
13
+ italic: "\x1B[3m",
14
+ white: "\x1B[97m",
15
+ gray: "\x1B[90m",
16
+ blue1: "\x1B[38;2;20;50;160m",
17
+ blue2: "\x1B[38;2;40;80;190m",
18
+ blue3: "\x1B[38;2;60;110;215m",
19
+ blue4: "\x1B[38;2;90;140;230m",
20
+ blue5: "\x1B[38;2;130;170;240m",
21
+ blue6: "\x1B[38;2;170;200;250m",
22
+ green: "\x1B[38;2;80;200;120m",
23
+ red: "\x1B[38;2;220;80;80m",
24
+ cyan: "\x1B[38;2;100;200;220m",
25
+ yellow: "\x1B[38;2;220;200;80m",
26
+ bgBlue: "\x1B[48;2;20;50;160m"
27
+ };
28
+ function log(msg) {
29
+ process.stderr.write(msg + "\n");
30
+ }
31
+ var BANNER_FULL = [
32
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
33
+ " \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
34
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
35
+ " \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
36
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
37
+ " \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
38
+ ];
39
+ var BANNER_COLORS = [c.blue1, c.blue2, c.blue3, c.blue4, c.blue5, c.blue6];
40
+ function printBanner(subtitle) {
41
+ log("");
42
+ for (let i = 0; i < BANNER_FULL.length; i++) {
43
+ log(`${c.bold}${BANNER_COLORS[i]}${BANNER_FULL[i]}${c.reset}`);
44
+ }
45
+ log("");
46
+ log(` ${c.dim}${c.italic}${subtitle}${c.reset}`);
47
+ log("");
48
+ }
49
+
50
+ // src/inject.ts
7
51
  function parseInjectArgs(argv) {
8
52
  const args = argv.slice(2);
9
53
  const opts = {
@@ -58,41 +102,6 @@ WHAT IT DOES
58
102
  All tool() calls are automatically protected by SolonGate.
59
103
  `);
60
104
  }
61
- function log(msg) {
62
- process.stderr.write(msg + "\n");
63
- }
64
- var c = {
65
- reset: "\x1B[0m",
66
- bold: "\x1B[1m",
67
- dim: "\x1B[2m",
68
- italic: "\x1B[3m",
69
- green: "\x1B[38;2;80;200;120m",
70
- red: "\x1B[38;2;220;80;80m",
71
- blue1: "\x1B[38;2;20;50;160m",
72
- blue2: "\x1B[38;2;40;80;190m",
73
- blue3: "\x1B[38;2;60;110;215m",
74
- blue4: "\x1B[38;2;90;140;230m",
75
- blue5: "\x1B[38;2;130;170;240m",
76
- blue6: "\x1B[38;2;170;200;250m"
77
- };
78
- function printBanner(subtitle) {
79
- const lines = [
80
- " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
81
- " \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
82
- " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
83
- " \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
84
- " \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
85
- " \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
86
- ];
87
- const colors = [c.blue1, c.blue2, c.blue3, c.blue4, c.blue5, c.blue6];
88
- log("");
89
- for (let i = 0; i < lines.length; i++) {
90
- log(`${c.bold}${colors[i]}${lines[i]}${c.reset}`);
91
- }
92
- log("");
93
- log(` ${c.dim}${c.italic}${subtitle}${c.reset}`);
94
- log("");
95
- }
96
105
  function detectProject() {
97
106
  if (!existsSync(resolve("package.json"))) return false;
98
107
  try {
@@ -128,8 +137,8 @@ function findTsEntryFile() {
128
137
  "server.ts",
129
138
  "main.ts"
130
139
  ];
131
- for (const c2 of candidates) {
132
- const full = resolve(c2);
140
+ for (const c3 of candidates) {
141
+ const full = resolve(c3);
133
142
  if (existsSync(full)) {
134
143
  try {
135
144
  const content = readFileSync(full, "utf-8");
@@ -140,8 +149,8 @@ function findTsEntryFile() {
140
149
  }
141
150
  }
142
151
  }
143
- for (const c2 of candidates) {
144
- if (existsSync(resolve(c2))) return resolve(c2);
152
+ for (const c3 of candidates) {
153
+ if (existsSync(resolve(c3))) return resolve(c3);
145
154
  }
146
155
  return null;
147
156
  }
package/dist/pull-push.js CHANGED
@@ -5,13 +5,15 @@ import { readFileSync as readFileSync2, writeFileSync, existsSync as existsSync2
5
5
  import { resolve as resolve2 } from "path";
6
6
 
7
7
  // src/config.ts
8
- import { readFileSync, existsSync, appendFileSync } from "fs";
8
+ import { readFileSync, existsSync } from "fs";
9
+ import { appendFile } from "fs/promises";
9
10
  import { resolve } from "path";
10
11
  async function fetchCloudPolicy(apiKey, apiUrl, policyId) {
11
12
  let resolvedId = policyId;
12
13
  if (!resolvedId) {
13
14
  const listRes = await fetch(`${apiUrl}/api/v1/policies`, {
14
- headers: { "Authorization": `Bearer ${apiKey}` }
15
+ headers: { "Authorization": `Bearer ${apiKey}` },
16
+ signal: AbortSignal.timeout(1e4)
15
17
  });
16
18
  if (!listRes.ok) {
17
19
  const body = await listRes.text().catch(() => "");
@@ -26,7 +28,8 @@ async function fetchCloudPolicy(apiKey, apiUrl, policyId) {
26
28
  }
27
29
  const url = `${apiUrl}/api/v1/policies/${resolvedId}`;
28
30
  const res = await fetch(url, {
29
- headers: { "Authorization": `Bearer ${apiKey}` }
31
+ headers: { "Authorization": `Bearer ${apiKey}` },
32
+ signal: AbortSignal.timeout(1e4)
30
33
  });
31
34
  if (!res.ok) {
32
35
  const body = await res.text().catch(() => "");
@@ -151,13 +154,13 @@ async function list(apiKey, policyId) {
151
154
  log(bold(` Policies (${policies.length})`));
152
155
  log(dim(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
153
156
  log("");
154
- for (const p of policies) {
155
- try {
156
- const full = await fetchCloudPolicy(apiKey, API_URL, p.id);
157
- printPolicySummary(p, full.rules);
158
- } catch {
159
- printPolicySummary(p, []);
160
- }
157
+ const fullPolicies = await Promise.all(
158
+ policies.map(
159
+ (p) => fetchCloudPolicy(apiKey, API_URL, p.id).then((full) => ({ policy: p, rules: full.rules })).catch(() => ({ policy: p, rules: [] }))
160
+ )
161
+ );
162
+ for (const { policy, rules } of fullPolicies) {
163
+ printPolicySummary(policy, rules);
161
164
  }
162
165
  log(dim(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
163
166
  log("");