envis-node 0.0.1 → 0.0.2
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/package.json +1 -1
- package/src/main.js +11 -3
- package/src/session.js +76 -0
package/package.json
CHANGED
package/src/main.js
CHANGED
|
@@ -33,13 +33,21 @@ async function get(projectId, secretName) {
|
|
|
33
33
|
throw new Error("Both project id and secret name are required.");
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
const ciToken = process.env.ENVIS_CI_TOKEN;
|
|
37
|
+
let session = null;
|
|
38
|
+
if (!ciToken) {
|
|
39
|
+
await ensureSession();
|
|
40
|
+
session = await loadSession();
|
|
41
|
+
}
|
|
38
42
|
|
|
39
43
|
const headers = {
|
|
40
|
-
Authorization: `Bearer ${session.access_token}`,
|
|
41
44
|
"Content-Type": "application/json",
|
|
42
45
|
};
|
|
46
|
+
if (ciToken) {
|
|
47
|
+
headers["X-CI-Token"] = ciToken;
|
|
48
|
+
} else {
|
|
49
|
+
headers.Authorization = `Bearer ${session.access_token}`;
|
|
50
|
+
}
|
|
43
51
|
|
|
44
52
|
const url = `${BASE_URL}/v1/projects/${encodeURIComponent(
|
|
45
53
|
projectId
|
package/src/session.js
CHANGED
|
@@ -11,6 +11,76 @@ const REQUIRED_SESSION_KEYS = ["access_token", "refresh_token"];
|
|
|
11
11
|
const WAIT_TIME = 120; // seconds
|
|
12
12
|
const POLL_DELAY_SECONDS = 5;
|
|
13
13
|
|
|
14
|
+
function findDotEnv(startDir) {
|
|
15
|
+
let current = startDir;
|
|
16
|
+
while (current && current !== path.dirname(current)) {
|
|
17
|
+
const candidate = path.join(current, ".env");
|
|
18
|
+
if (fs.existsSync(candidate)) {
|
|
19
|
+
return candidate;
|
|
20
|
+
}
|
|
21
|
+
current = path.dirname(current);
|
|
22
|
+
}
|
|
23
|
+
const fallback = path.join(startDir, ".env");
|
|
24
|
+
return fs.existsSync(fallback) ? fallback : null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function parseDotEnvLine(line) {
|
|
28
|
+
const trimmed = line.trim();
|
|
29
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const normalized = trimmed.startsWith("export ")
|
|
33
|
+
? trimmed.slice(7).trim()
|
|
34
|
+
: trimmed;
|
|
35
|
+
const splitIndex = normalized.indexOf("=");
|
|
36
|
+
if (splitIndex <= 0) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const key = normalized.slice(0, splitIndex).trim();
|
|
40
|
+
let value = normalized.slice(splitIndex + 1).trim();
|
|
41
|
+
if (
|
|
42
|
+
(value.startsWith('"') && value.endsWith('"')) ||
|
|
43
|
+
(value.startsWith("'") && value.endsWith("'"))
|
|
44
|
+
) {
|
|
45
|
+
value = value.slice(1, -1);
|
|
46
|
+
}
|
|
47
|
+
value = value.replace(/\\n/g, "\n");
|
|
48
|
+
return { key, value };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function loadDotEnv() {
|
|
52
|
+
const envPath = findDotEnv(process.cwd());
|
|
53
|
+
if (!envPath) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
let raw;
|
|
57
|
+
try {
|
|
58
|
+
raw = fs.readFileSync(envPath, "utf-8");
|
|
59
|
+
} catch {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
raw.split(/\r?\n/).forEach((line) => {
|
|
63
|
+
const parsed = parseDotEnvLine(line);
|
|
64
|
+
if (!parsed || process.env[parsed.key] !== undefined) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
process.env[parsed.key] = parsed.value;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function isHeadless() {
|
|
72
|
+
if (process.env.ENVIS_CI_TOKEN) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
return !(process.stdin.isTTY && process.stdout.isTTY);
|
|
77
|
+
} catch {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
loadDotEnv();
|
|
83
|
+
|
|
14
84
|
function printc(text, color = "white") {
|
|
15
85
|
const colorFn = chalk[color];
|
|
16
86
|
if (typeof colorFn === "function") {
|
|
@@ -206,6 +276,12 @@ async function ensureSession() {
|
|
|
206
276
|
return;
|
|
207
277
|
}
|
|
208
278
|
|
|
279
|
+
if (isHeadless()) {
|
|
280
|
+
throw new Error(
|
|
281
|
+
"No cached session and headless environment detected. Set ENVIS_CI_TOKEN or run `envis login` on a machine with a browser."
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
209
285
|
const { waitForAuth } = require("./auth");
|
|
210
286
|
let openBrowser;
|
|
211
287
|
try {
|