@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/create.js +15 -11
- package/dist/index.js +822 -747
- package/dist/init.js +46 -33
- package/dist/inject.js +48 -39
- package/dist/pull-push.js +13 -10
- package/hooks/guard.mjs +1175 -1175
- package/package.json +70 -70
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 {
|
|
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
|
-
|
|
212
|
+
execFileSync("icacls", [fullDir, "/remove:d", "*S-1-1-0", "/T", "/Q"], { stdio: "ignore" });
|
|
181
213
|
} catch {
|
|
182
214
|
}
|
|
183
215
|
try {
|
|
184
|
-
|
|
216
|
+
execFileSync("attrib", ["-R", "/S", "/D", fullDir], { stdio: "ignore" });
|
|
185
217
|
} catch {
|
|
186
218
|
}
|
|
187
219
|
} else {
|
|
188
220
|
try {
|
|
189
|
-
|
|
221
|
+
execFileSync("chattr", ["-i", "-R", fullDir], { stdio: "ignore" });
|
|
190
222
|
} catch {
|
|
191
223
|
}
|
|
192
|
-
|
|
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
|
-
|
|
236
|
+
execFileSync("icacls", [fullPath, "/remove:d", "*S-1-1-0", "/Q"], { stdio: "ignore" });
|
|
205
237
|
} catch {
|
|
206
238
|
}
|
|
207
239
|
try {
|
|
208
|
-
|
|
240
|
+
execFileSync("attrib", ["-R", fullPath], { stdio: "ignore" });
|
|
209
241
|
} catch {
|
|
210
242
|
}
|
|
211
243
|
} else {
|
|
212
244
|
try {
|
|
213
|
-
|
|
245
|
+
execFileSync("chattr", ["-i", fullPath], { stdio: "ignore" });
|
|
214
246
|
} catch {
|
|
215
247
|
}
|
|
216
|
-
|
|
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((
|
|
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
|
|
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 =
|
|
382
|
+
const bannerColors = BANNER_COLORS;
|
|
370
383
|
console.log("");
|
|
371
384
|
for (let i = 0; i < bannerLines.length; i++) {
|
|
372
|
-
console.log(`${
|
|
385
|
+
console.log(`${c.bold}${bannerColors[i % bannerColors.length]}${bannerLines[i]}${c.reset}`);
|
|
373
386
|
}
|
|
374
387
|
console.log("");
|
|
375
|
-
console.log(` ${
|
|
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
|
|
132
|
-
const full = resolve(
|
|
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
|
|
144
|
-
if (existsSync(resolve(
|
|
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
|
|
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
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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("");
|