@fentz26/envcp 1.0.72 → 1.0.82
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/LICENSE +28 -17
- package/README.md +18 -6
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/base.js +2 -0
- package/dist/adapters/base.js.map +1 -1
- package/dist/cli/index.js +82 -21
- package/dist/cli/index.js.map +1 -1
- package/dist/config/manager.d.ts +15 -0
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +22 -6
- package/dist/config/manager.js.map +1 -1
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +42 -14
- package/dist/storage/index.js.map +1 -1
- package/dist/types.d.ts +0 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/crypto.d.ts +20 -4
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +63 -11
- package/dist/utils/crypto.js.map +1 -1
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +28 -18
- package/dist/utils/session.js.map +1 -1
- package/package.json +12 -3
- package/scripts/convert-wiki.sh +91 -0
- package/scripts/install.sh +1 -1
- package/scripts/postinstall.js +0 -1
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -6,8 +6,6 @@ export const EnvCPConfigSchema = z.object({
|
|
|
6
6
|
storage: z.object({
|
|
7
7
|
path: z.string().default('.envcp/store.enc'),
|
|
8
8
|
encrypted: z.boolean().default(true),
|
|
9
|
-
algorithm: z.enum(['aes-256-gcm', 'aes-256-cbc']).default('aes-256-gcm'),
|
|
10
|
-
compression: z.boolean().default(false),
|
|
11
9
|
}).default({}),
|
|
12
10
|
access: z.object({
|
|
13
11
|
allow_ai_read: z.boolean().default(false),
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE9B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAC5C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/crypto.d.ts
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives a 256-bit key from a password and salt using PBKDF2-SHA512.
|
|
3
|
+
* Used only for decrypting legacy v1: data.
|
|
4
|
+
*/
|
|
1
5
|
export declare function deriveKey(password: string, salt: Buffer): Buffer;
|
|
2
|
-
|
|
3
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Encrypts plaintext using AES-256-GCM with an Argon2id-derived key.
|
|
8
|
+
* Output format: `v2:<salt_hex><iv_hex><authTag_hex><ciphertext_hex>`
|
|
9
|
+
*/
|
|
10
|
+
export declare function encrypt(text: string, password: string): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Decrypts data produced by `encrypt`.
|
|
13
|
+
* Handles v2: (Argon2id), v1: (PBKDF2), and legacy unprefixed (PBKDF2) data.
|
|
14
|
+
*/
|
|
15
|
+
export declare function decrypt(encryptedData: string, password: string): Promise<string>;
|
|
4
16
|
export declare function generateId(): string;
|
|
5
17
|
export declare function generateSessionToken(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Masks a secret value for display, revealing only the first and last `showLength` characters.
|
|
20
|
+
* Short values are fully masked.
|
|
21
|
+
*/
|
|
6
22
|
export declare function maskValue(value: string, showLength?: number): string;
|
|
7
23
|
export declare function validatePassword(password: string, config: {
|
|
8
24
|
min_length?: number;
|
|
@@ -15,6 +31,6 @@ export declare function validatePassword(password: string, config: {
|
|
|
15
31
|
};
|
|
16
32
|
export declare function quickHash(input: string): string;
|
|
17
33
|
export declare function generateRecoveryKey(): string;
|
|
18
|
-
export declare function createRecoveryData(password: string, recoveryKey: string): string
|
|
19
|
-
export declare function recoverPassword(recoveryData: string, recoveryKey: string): string
|
|
34
|
+
export declare function createRecoveryData(password: string, recoveryKey: string): Promise<string>;
|
|
35
|
+
export declare function recoverPassword(recoveryData: string, recoveryKey: string): Promise<string>;
|
|
20
36
|
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAyBA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW7E;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAStF;AAgCD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,CAKvE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgCrC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAGD,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAGD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/F;AAGD,wBAAsB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhG"}
|
package/dist/utils/crypto.js
CHANGED
|
@@ -1,27 +1,63 @@
|
|
|
1
1
|
import * as crypto from 'crypto';
|
|
2
|
+
import argon2 from 'argon2';
|
|
2
3
|
const ALGORITHM = 'aes-256-gcm';
|
|
3
4
|
const IV_LENGTH = 16;
|
|
4
5
|
const AUTH_TAG_LENGTH = 16;
|
|
6
|
+
// v1 constants (PBKDF2 — kept for backward-compat decryption only)
|
|
5
7
|
const SALT_LENGTH = 64;
|
|
6
8
|
const ITERATIONS = 100000;
|
|
9
|
+
const VERSION_PREFIX_V1 = 'v1:';
|
|
10
|
+
// v2 constants (Argon2id)
|
|
11
|
+
const V2_SALT_LENGTH = 16;
|
|
12
|
+
const VERSION_PREFIX_V2 = 'v2:';
|
|
13
|
+
const ARGON2_OPTS = {
|
|
14
|
+
type: argon2.argon2id,
|
|
15
|
+
hashLength: 32,
|
|
16
|
+
memoryCost: 65536, // 64 MB
|
|
17
|
+
timeCost: 3,
|
|
18
|
+
parallelism: 1,
|
|
19
|
+
raw: true,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Derives a 256-bit key from a password and salt using PBKDF2-SHA512.
|
|
23
|
+
* Used only for decrypting legacy v1: data.
|
|
24
|
+
*/
|
|
7
25
|
export function deriveKey(password, salt) {
|
|
8
26
|
return crypto.pbkdf2Sync(password, salt, ITERATIONS, 32, 'sha512');
|
|
9
27
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Encrypts plaintext using AES-256-GCM with an Argon2id-derived key.
|
|
30
|
+
* Output format: `v2:<salt_hex><iv_hex><authTag_hex><ciphertext_hex>`
|
|
31
|
+
*/
|
|
32
|
+
export async function encrypt(text, password) {
|
|
33
|
+
const salt = crypto.randomBytes(V2_SALT_LENGTH);
|
|
34
|
+
const key = await argon2.hash(password, { ...ARGON2_OPTS, salt });
|
|
13
35
|
const iv = crypto.randomBytes(IV_LENGTH);
|
|
14
36
|
const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
|
|
15
37
|
let encrypted = cipher.update(text, 'utf8', 'hex');
|
|
16
38
|
encrypted += cipher.final('hex');
|
|
17
39
|
const authTag = cipher.getAuthTag();
|
|
18
|
-
return salt.toString('hex') + iv.toString('hex') + authTag.toString('hex') + encrypted;
|
|
40
|
+
return VERSION_PREFIX_V2 + salt.toString('hex') + iv.toString('hex') + authTag.toString('hex') + encrypted;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Decrypts data produced by `encrypt`.
|
|
44
|
+
* Handles v2: (Argon2id), v1: (PBKDF2), and legacy unprefixed (PBKDF2) data.
|
|
45
|
+
*/
|
|
46
|
+
export async function decrypt(encryptedData, password) {
|
|
47
|
+
if (encryptedData.startsWith(VERSION_PREFIX_V2)) {
|
|
48
|
+
return decryptV2(encryptedData.slice(VERSION_PREFIX_V2.length), password);
|
|
49
|
+
}
|
|
50
|
+
// v1: prefix or legacy unprefixed — both use PBKDF2
|
|
51
|
+
const data = encryptedData.startsWith(VERSION_PREFIX_V1)
|
|
52
|
+
? encryptedData.slice(VERSION_PREFIX_V1.length)
|
|
53
|
+
: encryptedData;
|
|
54
|
+
return decryptV1(data, password);
|
|
19
55
|
}
|
|
20
|
-
|
|
21
|
-
const salt = Buffer.from(
|
|
22
|
-
const iv = Buffer.from(
|
|
23
|
-
const authTag = Buffer.from(
|
|
24
|
-
const encrypted =
|
|
56
|
+
function decryptV1(data, password) {
|
|
57
|
+
const salt = Buffer.from(data.slice(0, SALT_LENGTH * 2), 'hex');
|
|
58
|
+
const iv = Buffer.from(data.slice(SALT_LENGTH * 2, SALT_LENGTH * 2 + IV_LENGTH * 2), 'hex');
|
|
59
|
+
const authTag = Buffer.from(data.slice(SALT_LENGTH * 2 + IV_LENGTH * 2, SALT_LENGTH * 2 + IV_LENGTH * 2 + AUTH_TAG_LENGTH * 2), 'hex');
|
|
60
|
+
const encrypted = data.slice(SALT_LENGTH * 2 + IV_LENGTH * 2 + AUTH_TAG_LENGTH * 2);
|
|
25
61
|
const key = deriveKey(password, salt);
|
|
26
62
|
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
|
|
27
63
|
decipher.setAuthTag(authTag);
|
|
@@ -29,12 +65,28 @@ export function decrypt(encryptedData, password) {
|
|
|
29
65
|
decrypted += decipher.final('utf8');
|
|
30
66
|
return decrypted;
|
|
31
67
|
}
|
|
68
|
+
async function decryptV2(data, password) {
|
|
69
|
+
const salt = Buffer.from(data.slice(0, V2_SALT_LENGTH * 2), 'hex');
|
|
70
|
+
const iv = Buffer.from(data.slice(V2_SALT_LENGTH * 2, V2_SALT_LENGTH * 2 + IV_LENGTH * 2), 'hex');
|
|
71
|
+
const authTag = Buffer.from(data.slice(V2_SALT_LENGTH * 2 + IV_LENGTH * 2, V2_SALT_LENGTH * 2 + IV_LENGTH * 2 + AUTH_TAG_LENGTH * 2), 'hex');
|
|
72
|
+
const encryptedHex = data.slice(V2_SALT_LENGTH * 2 + IV_LENGTH * 2 + AUTH_TAG_LENGTH * 2);
|
|
73
|
+
const key = await argon2.hash(password, { ...ARGON2_OPTS, salt });
|
|
74
|
+
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
|
|
75
|
+
decipher.setAuthTag(authTag);
|
|
76
|
+
let decrypted = decipher.update(encryptedHex, 'hex', 'utf8');
|
|
77
|
+
decrypted += decipher.final('utf8');
|
|
78
|
+
return decrypted;
|
|
79
|
+
}
|
|
32
80
|
export function generateId() {
|
|
33
81
|
return crypto.randomBytes(16).toString('hex');
|
|
34
82
|
}
|
|
35
83
|
export function generateSessionToken() {
|
|
36
84
|
return crypto.randomBytes(32).toString('hex');
|
|
37
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Masks a secret value for display, revealing only the first and last `showLength` characters.
|
|
88
|
+
* Short values are fully masked.
|
|
89
|
+
*/
|
|
38
90
|
export function maskValue(value, showLength = 4) {
|
|
39
91
|
if (value.length <= showLength * 2) {
|
|
40
92
|
return '*'.repeat(value.length);
|
|
@@ -75,11 +127,11 @@ export function generateRecoveryKey() {
|
|
|
75
127
|
return crypto.randomBytes(24).toString('hex');
|
|
76
128
|
}
|
|
77
129
|
// Wrap the user's password with the recovery key so it can be recovered later
|
|
78
|
-
export function createRecoveryData(password, recoveryKey) {
|
|
130
|
+
export async function createRecoveryData(password, recoveryKey) {
|
|
79
131
|
return encrypt(password, recoveryKey);
|
|
80
132
|
}
|
|
81
133
|
// Unwrap the password using the recovery key
|
|
82
|
-
export function recoverPassword(recoveryData, recoveryKey) {
|
|
134
|
+
export async function recoverPassword(recoveryData, recoveryKey) {
|
|
83
135
|
return decrypt(recoveryData, recoveryKey);
|
|
84
136
|
}
|
|
85
137
|
//# sourceMappingURL=crypto.js.map
|
package/dist/utils/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAC;AAGrD,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,EAAE,MAAM,EAAE,cAAc,GAAE,MAAW,EAAE,aAAa,GAAE,MAAU;IAMjF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAmChD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ3B,MAAM,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAsCjC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,UAAU,IAAI,OAAO,GAAG,IAAI;IAI5B,gBAAgB,IAAI,MAAM;CAQ3B"}
|
package/dist/utils/session.js
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
+
import lockfile from 'proper-lockfile';
|
|
3
4
|
import { SessionSchema } from '../types.js';
|
|
4
5
|
import { generateId, encrypt, decrypt } from './crypto.js';
|
|
5
|
-
import * as crypto from 'crypto';
|
|
6
|
-
const PBKDF2_ITERATIONS = 100000;
|
|
7
|
-
function hashPassword(password, salt) {
|
|
8
|
-
return crypto.pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, 32, 'sha512');
|
|
9
|
-
}
|
|
10
6
|
export class SessionManager {
|
|
11
7
|
sessionPath;
|
|
12
8
|
session = null;
|
|
@@ -32,15 +28,20 @@ export class SessionManager {
|
|
|
32
28
|
last_access: now.toISOString(),
|
|
33
29
|
};
|
|
34
30
|
this.password = password;
|
|
35
|
-
const salt = crypto.randomBytes(32);
|
|
36
|
-
const passwordHash = hashPassword(password, salt);
|
|
37
31
|
const sessionData = JSON.stringify({
|
|
38
32
|
session: this.session,
|
|
39
|
-
passwordHash: passwordHash.toString('hex'),
|
|
40
|
-
salt: salt.toString('hex'),
|
|
41
33
|
});
|
|
42
|
-
const encrypted = encrypt(sessionData, password);
|
|
43
|
-
await fs.
|
|
34
|
+
const encrypted = await encrypt(sessionData, password);
|
|
35
|
+
if (!await fs.pathExists(this.sessionPath)) {
|
|
36
|
+
await fs.writeFile(this.sessionPath, '', { encoding: 'utf8', mode: 0o600 });
|
|
37
|
+
}
|
|
38
|
+
const releaseCreate = await lockfile.lock(this.sessionPath, { retries: { retries: 3, minTimeout: 50 } });
|
|
39
|
+
try {
|
|
40
|
+
await fs.writeFile(this.sessionPath, encrypted, { encoding: 'utf8', mode: 0o600 });
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await releaseCreate();
|
|
44
|
+
}
|
|
44
45
|
return this.session;
|
|
45
46
|
}
|
|
46
47
|
async load(password) {
|
|
@@ -48,12 +49,16 @@ export class SessionManager {
|
|
|
48
49
|
return null;
|
|
49
50
|
}
|
|
50
51
|
try {
|
|
52
|
+
const stat = await fs.lstat(this.sessionPath);
|
|
53
|
+
if (!stat.isFile()) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
51
56
|
const encrypted = await fs.readFile(this.sessionPath, 'utf8');
|
|
52
57
|
const pwd = password || this.password;
|
|
53
58
|
if (!pwd) {
|
|
54
59
|
return null;
|
|
55
60
|
}
|
|
56
|
-
const decrypted = decrypt(encrypted, pwd);
|
|
61
|
+
const decrypted = await decrypt(encrypted, pwd);
|
|
57
62
|
const data = JSON.parse(decrypted);
|
|
58
63
|
this.session = SessionSchema.parse(data.session);
|
|
59
64
|
// Password is verified by successful decryption — no longer stored in file
|
|
@@ -89,15 +94,20 @@ export class SessionManager {
|
|
|
89
94
|
this.session.expires = expires.toISOString();
|
|
90
95
|
this.session.extensions += 1;
|
|
91
96
|
this.session.last_access = now.toISOString();
|
|
92
|
-
const salt = crypto.randomBytes(32);
|
|
93
|
-
const passwordHash = hashPassword(this.password, salt);
|
|
94
97
|
const sessionData = JSON.stringify({
|
|
95
98
|
session: this.session,
|
|
96
|
-
passwordHash: passwordHash.toString('hex'),
|
|
97
|
-
salt: salt.toString('hex'),
|
|
98
99
|
});
|
|
99
|
-
const encrypted = encrypt(sessionData, this.password);
|
|
100
|
-
await fs.
|
|
100
|
+
const encrypted = await encrypt(sessionData, this.password);
|
|
101
|
+
if (!await fs.pathExists(this.sessionPath)) {
|
|
102
|
+
await fs.writeFile(this.sessionPath, '', { encoding: 'utf8', mode: 0o600 });
|
|
103
|
+
}
|
|
104
|
+
const releaseExtend = await lockfile.lock(this.sessionPath, { retries: { retries: 3, minTimeout: 50 } });
|
|
105
|
+
try {
|
|
106
|
+
await fs.writeFile(this.sessionPath, encrypted, { encoding: 'utf8', mode: 0o600 });
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
await releaseExtend();
|
|
110
|
+
}
|
|
101
111
|
return this.session;
|
|
102
112
|
}
|
|
103
113
|
async destroy() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fentz26/envcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.82",
|
|
4
|
+
"mcpName": "io.github.fentz26/envcp",
|
|
4
5
|
"description": "MCP server for secure environment variable management - Keep your secrets safe from AI agents",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/fentz26/EnvCP.git"
|
|
9
|
+
},
|
|
5
10
|
"type": "module",
|
|
6
11
|
"main": "dist/index.js",
|
|
7
12
|
"types": "dist/index.d.ts",
|
|
@@ -12,7 +17,7 @@
|
|
|
12
17
|
"build": "tsc",
|
|
13
18
|
"start": "node dist/index.js",
|
|
14
19
|
"dev": "ts-node src/index.ts",
|
|
15
|
-
"test": "jest"
|
|
20
|
+
"test": "NODE_OPTIONS='--experimental-vm-modules' jest"
|
|
16
21
|
},
|
|
17
22
|
"keywords": [
|
|
18
23
|
"mcp",
|
|
@@ -24,23 +29,27 @@
|
|
|
24
29
|
"model-context-protocol"
|
|
25
30
|
],
|
|
26
31
|
"author": "fentz26",
|
|
27
|
-
"license": "
|
|
32
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
28
33
|
"dependencies": {
|
|
29
34
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
35
|
+
"argon2": "^0.44.0",
|
|
30
36
|
"chalk": "^4.1.2",
|
|
31
37
|
"commander": "^11.1.0",
|
|
32
38
|
"dotenv": "^17.4.1",
|
|
33
39
|
"fs-extra": "^11.2.0",
|
|
34
40
|
"inquirer": "^8.2.6",
|
|
35
41
|
"js-yaml": "^4.1.0",
|
|
42
|
+
"proper-lockfile": "^4.1.2",
|
|
36
43
|
"zod": "^3.22.4"
|
|
37
44
|
},
|
|
38
45
|
"devDependencies": {
|
|
46
|
+
"@types/argon2": "^0.14.1",
|
|
39
47
|
"@types/fs-extra": "^11.0.4",
|
|
40
48
|
"@types/inquirer": "^9.0.7",
|
|
41
49
|
"@types/jest": "^30.0.0",
|
|
42
50
|
"@types/js-yaml": "^4.0.9",
|
|
43
51
|
"@types/node": "^20.10.0",
|
|
52
|
+
"@types/proper-lockfile": "^4.1.4",
|
|
44
53
|
"jest": "^30.3.0",
|
|
45
54
|
"ts-jest": "^29.4.9",
|
|
46
55
|
"typescript": "^5.3.0"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Wiki to MDX conversion script
|
|
4
|
+
# Converts wiki markdown files to Mintlify MDX format
|
|
5
|
+
|
|
6
|
+
WIKI_DIR="/home/fentz/EnvCP/wiki-content"
|
|
7
|
+
DOCS_DIR="/home/fentz/EnvCP/docs"
|
|
8
|
+
|
|
9
|
+
# Mapping of wiki files to docs locations
|
|
10
|
+
declare -A file_map=(
|
|
11
|
+
["Home.md"]="index.mdx"
|
|
12
|
+
["Installation.md"]="installation.mdx"
|
|
13
|
+
["Quick-Start-Guide.md"]="quick-start.mdx"
|
|
14
|
+
["CLI-Reference.md"]="cli-reference/commands.mdx"
|
|
15
|
+
["Configuration-Reference.md"]="configuration/reference.mdx"
|
|
16
|
+
["MCP-Integration.md"]="integrations/mcp.mdx"
|
|
17
|
+
["OpenAI-Integration.md"]="integrations/openai.mdx"
|
|
18
|
+
["Gemini-Integration.md"]="integrations/gemini.mdx"
|
|
19
|
+
["Local-LLM-Integration.md"]="integrations/local-llm.mdx"
|
|
20
|
+
["API-Reference.md"]="api-reference/endpoints.mdx"
|
|
21
|
+
["Security-Best-Practices.md"]="security/best-practices.mdx"
|
|
22
|
+
["Session-Management.md"]="advanced/session-management.mdx"
|
|
23
|
+
["Troubleshooting.md"]="advanced/troubleshooting.mdx"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
convert_file() {
|
|
27
|
+
local input_file="$1"
|
|
28
|
+
local output_file="$2"
|
|
29
|
+
local filename=$(basename "$input_file")
|
|
30
|
+
|
|
31
|
+
# Add frontmatter based on file
|
|
32
|
+
local title="${filename%.md}"
|
|
33
|
+
title="${title//-/ }"
|
|
34
|
+
title="${title//_/ }"
|
|
35
|
+
|
|
36
|
+
# Extract first heading as title
|
|
37
|
+
local first_heading=$(grep -m 1 "^# " "$input_file" | sed 's/^# //')
|
|
38
|
+
if [ -n "$first_heading" ]; then
|
|
39
|
+
title="$first_heading"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# Create temp file with frontmatter
|
|
43
|
+
echo "---" > /tmp/temp_mdx.mdx
|
|
44
|
+
echo "title: $title" >> /tmp/temp_mdx.mdx
|
|
45
|
+
echo "---" >> /tmp/temp_mdx.mdx
|
|
46
|
+
echo "" >> /tmp/temp_mdx.mdx
|
|
47
|
+
|
|
48
|
+
# Convert wiki-specific markdown to MDX
|
|
49
|
+
cat "$input_file" | \
|
|
50
|
+
# Convert wiki links to docs links
|
|
51
|
+
sed 's/\[Installation\](Installation)/[Installation](\/installation)/g' | \
|
|
52
|
+
sed 's/\[Quick Start Guide\](Quick-Start-Guide)/[Quick Start Guide](\/quick-start)/g' | \
|
|
53
|
+
sed 's/\[Configuration\](Configuration)/[Configuration](\/configuration\/reference)/g' | \
|
|
54
|
+
sed 's/\[MCP Integration\](MCP-Integration)/[MCP Integration](\/integrations\/mcp)/g' | \
|
|
55
|
+
sed 's/\[OpenAI Integration\](OpenAI-Integration)/[OpenAI Integration](\/integrations\/openai)/g' | \
|
|
56
|
+
sed 's/\[Gemini Integration\](Gemini-Integration)/[Gemini Integration](\/integrations\/gemini)/g' | \
|
|
57
|
+
sed 's/\[Local LLM Integration\](Local-LLM-Integration)/[Local LLM Integration](\/integrations\/local-llm)/g' | \
|
|
58
|
+
sed 's/\[Security Best Practices\](Security-Best-Practices)/[Security Best Practices](\/security\/best-practices)/g' | \
|
|
59
|
+
sed 's/\[Session Management\](Session-Management)/[Session Management](\/advanced\/session-management)/g' | \
|
|
60
|
+
sed 's/\[Troubleshooting\](Troubleshooting)/[Troubleshooting](\/advanced\/troubleshooting)/g' | \
|
|
61
|
+
sed 's/\[CLI Reference\](CLI-Reference)/[CLI Reference](\/cli-reference\/commands)/g' | \
|
|
62
|
+
sed 's/\[Configuration Reference\](Configuration-Reference)/[Configuration Reference](\/configuration\/reference)/g' | \
|
|
63
|
+
sed 's/\[API Reference\](API-Reference)/[API Reference](\/api-reference\/endpoints)/g' \
|
|
64
|
+
>> /tmp/temp_mdx.mdx
|
|
65
|
+
|
|
66
|
+
# Remove first heading if it matches title (to avoid duplication)
|
|
67
|
+
if [ "$(head -n 4 /tmp/temp_mdx.mdx | tail -n 1 | sed 's/^# //')" = "$title" ]; then
|
|
68
|
+
# Remove the duplicate heading
|
|
69
|
+
sed -i '4d' /tmp/temp_mdx.mdx
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Move to final location
|
|
73
|
+
mkdir -p "$(dirname "$output_file")"
|
|
74
|
+
cp /tmp/temp_mdx.mdx "$output_file"
|
|
75
|
+
|
|
76
|
+
echo "Converted: $input_file → $output_file"
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
# Convert all files
|
|
80
|
+
for wiki_file in "${!file_map[@]}"; do
|
|
81
|
+
input_path="$WIKI_DIR/$wiki_file"
|
|
82
|
+
output_path="$DOCS_DIR/${file_map[$wiki_file]}"
|
|
83
|
+
|
|
84
|
+
if [ -f "$input_path" ]; then
|
|
85
|
+
convert_file "$input_path" "$output_path"
|
|
86
|
+
else
|
|
87
|
+
echo "Warning: $input_path not found"
|
|
88
|
+
fi
|
|
89
|
+
done
|
|
90
|
+
|
|
91
|
+
echo "✓ Conversion complete!"
|
package/scripts/install.sh
CHANGED
|
@@ -45,7 +45,7 @@ if npm install -g @fentz26/envcp; then
|
|
|
45
45
|
echo " envcp add KEY # Add a secret"
|
|
46
46
|
echo " envcp --help # See all commands"
|
|
47
47
|
echo ""
|
|
48
|
-
echo -e "${BOLD}Docs:${NC} https://
|
|
48
|
+
echo -e "${BOLD}Docs:${NC} https://envcp.fentz.dev"
|
|
49
49
|
else
|
|
50
50
|
echo ""
|
|
51
51
|
echo -e "${RED}Installation failed. Try with sudo:${NC}"
|
package/scripts/postinstall.js
CHANGED