profile-manager-secure 1.0.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.
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +107 -0
- package/dist/cli.js.map +1 -0
- package/dist/frontend/assets/index-D0IIAYWB.css +1 -0
- package/dist/frontend/assets/index-D9Y0_s3b.js +273 -0
- package/dist/frontend/index.html +26 -0
- package/dist/middleware/auth.middleware.d.ts +8 -0
- package/dist/middleware/auth.middleware.js +51 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/middleware/error.middleware.d.ts +2 -0
- package/dist/middleware/error.middleware.js +11 -0
- package/dist/middleware/error.middleware.js.map +1 -0
- package/dist/modules/auth/auth.controller.d.ts +1 -0
- package/dist/modules/auth/auth.controller.js +175 -0
- package/dist/modules/auth/auth.controller.js.map +1 -0
- package/dist/modules/credential/credential.controller.d.ts +1 -0
- package/dist/modules/credential/credential.controller.js +263 -0
- package/dist/modules/credential/credential.controller.js.map +1 -0
- package/dist/modules/proxy/proxy.controller.d.ts +1 -0
- package/dist/modules/proxy/proxy.controller.js +270 -0
- package/dist/modules/proxy/proxy.controller.js.map +1 -0
- package/dist/modules/proxy/proxy.service.d.ts +28 -0
- package/dist/modules/proxy/proxy.service.js +185 -0
- package/dist/modules/proxy/proxy.service.js.map +1 -0
- package/dist/modules/tailscale/tailscale.controller.d.ts +1 -0
- package/dist/modules/tailscale/tailscale.controller.js +149 -0
- package/dist/modules/tailscale/tailscale.controller.js.map +1 -0
- package/dist/modules/tailscale/tailscale.service.d.ts +96 -0
- package/dist/modules/tailscale/tailscale.service.js +561 -0
- package/dist/modules/tailscale/tailscale.service.js.map +1 -0
- package/dist/modules/totp/totp.controller.d.ts +1 -0
- package/dist/modules/totp/totp.controller.js +41 -0
- package/dist/modules/totp/totp.controller.js.map +1 -0
- package/dist/modules/totp/totp.service.d.ts +26 -0
- package/dist/modules/totp/totp.service.js +96 -0
- package/dist/modules/totp/totp.service.js.map +1 -0
- package/dist/modules/totp/totp.service.test.d.ts +1 -0
- package/dist/modules/totp/totp.service.test.js +41 -0
- package/dist/modules/totp/totp.service.test.js.map +1 -0
- package/dist/modules/vault/apikey.service.d.ts +27 -0
- package/dist/modules/vault/apikey.service.js +87 -0
- package/dist/modules/vault/apikey.service.js.map +1 -0
- package/dist/modules/vault/constants.d.ts +2 -0
- package/dist/modules/vault/constants.js +24 -0
- package/dist/modules/vault/constants.js.map +1 -0
- package/dist/modules/vault/types.d.ts +73 -0
- package/dist/modules/vault/types.js +2 -0
- package/dist/modules/vault/types.js.map +1 -0
- package/dist/modules/vault/vault-migration.service.d.ts +21 -0
- package/dist/modules/vault/vault-migration.service.js +99 -0
- package/dist/modules/vault/vault-migration.service.js.map +1 -0
- package/dist/modules/vault/vault-storage.service.d.ts +22 -0
- package/dist/modules/vault/vault-storage.service.js +76 -0
- package/dist/modules/vault/vault-storage.service.js.map +1 -0
- package/dist/modules/vault/vault.service.d.ts +66 -0
- package/dist/modules/vault/vault.service.js +229 -0
- package/dist/modules/vault/vault.service.js.map +1 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.js +67 -0
- package/dist/server.js.map +1 -0
- package/dist/utils/crypto.d.ts +20 -0
- package/dist/utils/crypto.js +54 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/crypto.test.d.ts +1 -0
- package/dist/utils/crypto.test.js +66 -0
- package/dist/utils/crypto.test.js.map +1 -0
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/logger.js +12 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailscale.service.js","sourceRoot":"","sources":["../../../src/modules/tailscale/tailscale.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const totpRouter: import("express-serve-static-core").Router;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { totpService } from './totp.service.js';
|
|
3
|
+
import { authMiddleware } from '../../middleware/auth.middleware.js';
|
|
4
|
+
import { vaultService } from '../vault/vault.service.js';
|
|
5
|
+
const router = Router();
|
|
6
|
+
// Endpoint for the "2fa.live"-like generator tool (public or restricted, decided by authMiddleware)
|
|
7
|
+
// Let's keep it restricted as part of the tool
|
|
8
|
+
router.post('/generate', authMiddleware, async (req, res) => {
|
|
9
|
+
try {
|
|
10
|
+
const { secret } = req.body;
|
|
11
|
+
if (!secret) {
|
|
12
|
+
return res.status(400).json({ error: 'Secret is required' });
|
|
13
|
+
}
|
|
14
|
+
const result = totpService.generate(secret);
|
|
15
|
+
res.json(result);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
res.status(400).json({ error: error.message });
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
// Endpoint for credentials (gets secret from vault)
|
|
22
|
+
router.get('/credentials/:id', authMiddleware, async (req, res) => {
|
|
23
|
+
try {
|
|
24
|
+
const { id } = req.params;
|
|
25
|
+
const data = vaultService.getData();
|
|
26
|
+
const credential = data.credentials.find(c => c.id === id);
|
|
27
|
+
if (!credential || !credential.totp_secret) {
|
|
28
|
+
return res.status(404).json({ error: 'Credential not found or no 2FA secret' });
|
|
29
|
+
}
|
|
30
|
+
const result = totpService.generate(credential.totp_secret);
|
|
31
|
+
res.json({
|
|
32
|
+
...result,
|
|
33
|
+
title: credential.title
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
res.status(500).json({ error: error.message });
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
export const totpRouter = router;
|
|
41
|
+
//# sourceMappingURL=totp.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.controller.js","sourceRoot":"","sources":["../../../src/modules/totp/totp.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAExB,oGAAoG;AACpG,+CAA+C;AAC/C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC7E,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACnF,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5D,GAAG,CAAC,IAAI,CAAC;YACL,GAAG,MAAM;YACT,KAAK,EAAE,UAAU,CAAC,KAAK;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare class TotpService {
|
|
2
|
+
/**
|
|
3
|
+
* Extracts and normalizes the secret from various formats including:
|
|
4
|
+
* 1. otpauth:// URLs
|
|
5
|
+
* 2. Formats separated by |, :, or , (e.g., uid|password|secret)
|
|
6
|
+
* 3. Raw Base32 strings
|
|
7
|
+
*/
|
|
8
|
+
extractSecret(input: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Calculates remaining seconds in the current TOTP time step
|
|
11
|
+
*/
|
|
12
|
+
private getTimeRemaining;
|
|
13
|
+
/**
|
|
14
|
+
* Generates a TOTP token and its remaining time based on a secret
|
|
15
|
+
*/
|
|
16
|
+
generate(rawSecret: string): {
|
|
17
|
+
token: string;
|
|
18
|
+
timeRemaining: number;
|
|
19
|
+
period: number;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Verifies a given token against a secret
|
|
23
|
+
*/
|
|
24
|
+
verify(rawSecret: string, token: string): boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare const totpService: TotpService;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { generateSync, verifySync } from 'otplib';
|
|
2
|
+
const DEFAULT_PERIOD = 30;
|
|
3
|
+
export class TotpService {
|
|
4
|
+
/**
|
|
5
|
+
* Extracts and normalizes the secret from various formats including:
|
|
6
|
+
* 1. otpauth:// URLs
|
|
7
|
+
* 2. Formats separated by |, :, or , (e.g., uid|password|secret)
|
|
8
|
+
* 3. Raw Base32 strings
|
|
9
|
+
*/
|
|
10
|
+
extractSecret(input) {
|
|
11
|
+
if (!input)
|
|
12
|
+
return '';
|
|
13
|
+
let secretStr = input.trim();
|
|
14
|
+
// 1. Handle otpauth:// URLs (commonly generated by QR code scanners)
|
|
15
|
+
if (secretStr.startsWith('otpauth://')) {
|
|
16
|
+
try {
|
|
17
|
+
const url = new URL(secretStr);
|
|
18
|
+
const secretParam = url.searchParams.get('secret');
|
|
19
|
+
if (secretParam) {
|
|
20
|
+
secretStr = secretParam;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
// If parsing fails, fall through to other methods
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// 2. Handle delimited formats like uid|pass|secret, uid:pass:secret, etc.
|
|
28
|
+
const delimiters = ['|', ':', ','];
|
|
29
|
+
for (const delimiter of delimiters) {
|
|
30
|
+
if (secretStr.includes(delimiter)) {
|
|
31
|
+
const parts = secretStr.split(delimiter);
|
|
32
|
+
// Assume the secret is the last part (very common in credential dumps)
|
|
33
|
+
secretStr = parts[parts.length - 1].trim();
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// 3. Clean up the secret (remove spaces, hyphens, and convert to uppercase)
|
|
38
|
+
// Many authenticators output secrets like "xxxx xxxx xxxx xxxx" or "xxxx-xxxx-xxxx-xxxx"
|
|
39
|
+
secretStr = secretStr.replace(/[\s-]/g, '').toUpperCase();
|
|
40
|
+
// 4. Basic validation to ensure it looks like Base32
|
|
41
|
+
// Base32 alphabet: A-Z, 2-7
|
|
42
|
+
secretStr = secretStr.replace(/[^A-Z2-7]/g, '');
|
|
43
|
+
return secretStr;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Calculates remaining seconds in the current TOTP time step
|
|
47
|
+
*/
|
|
48
|
+
getTimeRemaining(period = DEFAULT_PERIOD) {
|
|
49
|
+
const epoch = Math.floor(Date.now() / 1000);
|
|
50
|
+
return period - (epoch % period);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Generates a TOTP token and its remaining time based on a secret
|
|
54
|
+
*/
|
|
55
|
+
generate(rawSecret) {
|
|
56
|
+
const secret = this.extractSecret(rawSecret);
|
|
57
|
+
if (!secret) {
|
|
58
|
+
throw new Error('Secret is empty');
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const token = generateSync({
|
|
62
|
+
secret,
|
|
63
|
+
period: DEFAULT_PERIOD,
|
|
64
|
+
});
|
|
65
|
+
const timeRemaining = this.getTimeRemaining(DEFAULT_PERIOD);
|
|
66
|
+
return {
|
|
67
|
+
token,
|
|
68
|
+
timeRemaining,
|
|
69
|
+
period: DEFAULT_PERIOD,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw new Error(`Invalid Base32 secret or TOTP generation failed: ${error.message}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Verifies a given token against a secret
|
|
78
|
+
*/
|
|
79
|
+
verify(rawSecret, token) {
|
|
80
|
+
const secret = this.extractSecret(rawSecret);
|
|
81
|
+
try {
|
|
82
|
+
const result = verifySync({
|
|
83
|
+
secret,
|
|
84
|
+
token,
|
|
85
|
+
period: DEFAULT_PERIOD,
|
|
86
|
+
epochTolerance: DEFAULT_PERIOD,
|
|
87
|
+
});
|
|
88
|
+
return result.valid;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export const totpService = new TotpService();
|
|
96
|
+
//# sourceMappingURL=totp.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.service.js","sourceRoot":"","sources":["../../../src/modules/totp/totp.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAElD,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,MAAM,OAAO,WAAW;IACtB;;;;;OAKG;IACI,aAAa,CAAC,KAAa;QAChC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAE7B,qEAAqE;QACrE,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC/B,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,WAAW,EAAE,CAAC;oBAChB,SAAS,GAAG,WAAW,CAAC;gBAC1B,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,kDAAkD;YACpD,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACnC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACzC,uEAAuE;gBACvE,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3C,MAAM;YACR,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,yFAAyF;QACzF,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAE1D,qDAAqD;QACrD,4BAA4B;QAC5B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAEhD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,SAAiB,cAAc;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5C,OAAO,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,SAAiB;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,YAAY,CAAC;gBACzB,MAAM;gBACN,MAAM,EAAE,cAAc;aACvB,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YAE5D,OAAO;gBACL,KAAK;gBACL,aAAa;gBACb,MAAM,EAAE,cAAc;aACvB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oDAAqD,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAiB,EAAE,KAAa;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,MAAM;gBACN,KAAK;gBACL,MAAM,EAAE,cAAc;gBACtB,cAAc,EAAE,cAAc;aAC/B,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { totpService } from './totp.service.js';
|
|
2
|
+
// A standard test secret from otplib documentation
|
|
3
|
+
const testSecret = 'KVK5YFA6L4Q222V5';
|
|
4
|
+
function runTests() {
|
|
5
|
+
console.log('Running TOTP service tests...');
|
|
6
|
+
// Test 1: Generate token
|
|
7
|
+
try {
|
|
8
|
+
const result = totpService.generate(testSecret);
|
|
9
|
+
console.assert(typeof result.token === 'string' && result.token.length === 6, 'Test 1.1 Failed: Token generation');
|
|
10
|
+
console.assert(typeof result.timeRemaining === 'number' && result.timeRemaining > 0, 'Test 1.2 Failed: Time remaining');
|
|
11
|
+
console.log('Test 1 Passed: Token generation');
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
console.error('Test 1 Failed:', error);
|
|
15
|
+
}
|
|
16
|
+
// Test 2: Verify token
|
|
17
|
+
try {
|
|
18
|
+
const { token } = totpService.generate(testSecret);
|
|
19
|
+
const isValid = totpService.verify(testSecret, token);
|
|
20
|
+
console.assert(isValid, 'Test 2.1 Failed: Token verification');
|
|
21
|
+
const isInvalid = totpService.verify(testSecret, '000000');
|
|
22
|
+
console.assert(!isInvalid, 'Test 2.2 Failed: Invalid token verification');
|
|
23
|
+
console.log('Test 2 Passed: Token verification');
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('Test 2 Failed:', error);
|
|
27
|
+
}
|
|
28
|
+
// Test 3: Extract secret
|
|
29
|
+
try {
|
|
30
|
+
const formattedSecret = 'user|pass| KVK5YFA6L4Q222V5 ';
|
|
31
|
+
const extracted = totpService.extractSecret(formattedSecret);
|
|
32
|
+
console.assert(extracted === 'KVK5YFA6L4Q222V5', 'Test 3 Failed: Secret extraction');
|
|
33
|
+
console.log('Test 3 Passed: Secret extraction');
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error('Test 3 Failed:', error);
|
|
37
|
+
}
|
|
38
|
+
console.log('All TOTP service tests completed.');
|
|
39
|
+
}
|
|
40
|
+
runTests();
|
|
41
|
+
//# sourceMappingURL=totp.service.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.service.test.js","sourceRoot":"","sources":["../../../src/modules/totp/totp.service.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,mDAAmD;AACnD,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAEtC,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7C,yBAAyB;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,mCAAmC,CAAC,CAAC;QACnH,OAAO,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,iCAAiC,CAAC,CAAC;QACxH,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,qCAAqC,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,6CAA6C,CAAC,CAAC;QAE1E,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,gCAAgC,CAAC;QACzD,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,kBAAkB,EAAE,kCAAkC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACnD,CAAC;AAED,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ApiKey, VaultData } from './types.js';
|
|
2
|
+
export declare class ApiKeyService {
|
|
3
|
+
private getVaultData;
|
|
4
|
+
private saveVault;
|
|
5
|
+
private isVaultUnlocked;
|
|
6
|
+
constructor(getVaultData: () => VaultData, saveVault: () => Promise<void>, isVaultUnlocked: () => boolean);
|
|
7
|
+
/**
|
|
8
|
+
* Get all API keys (only if unlocked)
|
|
9
|
+
*/
|
|
10
|
+
getApiKeys(): ApiKey[];
|
|
11
|
+
/**
|
|
12
|
+
* Create a new API key
|
|
13
|
+
*/
|
|
14
|
+
createApiKey(name: string): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Toggle API key enabled state
|
|
17
|
+
*/
|
|
18
|
+
toggleApiKey(id: string, enabled: boolean): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Delete an API key
|
|
21
|
+
*/
|
|
22
|
+
deleteApiKey(id: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Validate if an API key is valid and enabled
|
|
25
|
+
*/
|
|
26
|
+
validateApiKey(key: string): boolean;
|
|
27
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
export class ApiKeyService {
|
|
3
|
+
getVaultData;
|
|
4
|
+
saveVault;
|
|
5
|
+
isVaultUnlocked;
|
|
6
|
+
constructor(getVaultData, saveVault, isVaultUnlocked) {
|
|
7
|
+
this.getVaultData = getVaultData;
|
|
8
|
+
this.saveVault = saveVault;
|
|
9
|
+
this.isVaultUnlocked = isVaultUnlocked;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get all API keys (only if unlocked)
|
|
13
|
+
*/
|
|
14
|
+
getApiKeys() {
|
|
15
|
+
if (!this.isVaultUnlocked()) {
|
|
16
|
+
throw new Error('Vault is locked');
|
|
17
|
+
}
|
|
18
|
+
return this.getVaultData().apiKeys || [];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a new API key
|
|
22
|
+
*/
|
|
23
|
+
async createApiKey(name) {
|
|
24
|
+
if (!this.isVaultUnlocked()) {
|
|
25
|
+
throw new Error('Vault is locked');
|
|
26
|
+
}
|
|
27
|
+
// Generate 32 characters random key
|
|
28
|
+
const rawKey = 'pmkey_' + crypto.randomBytes(16).toString('hex');
|
|
29
|
+
const keyPrefix = rawKey.substring(0, 10); // "pmkey_xxxx"
|
|
30
|
+
const newKey = {
|
|
31
|
+
id: crypto.randomBytes(8).toString('hex'),
|
|
32
|
+
name,
|
|
33
|
+
key: rawKey,
|
|
34
|
+
keyPrefix,
|
|
35
|
+
createdAt: new Date().toISOString(),
|
|
36
|
+
enabled: true
|
|
37
|
+
};
|
|
38
|
+
const data = this.getVaultData();
|
|
39
|
+
if (!data.apiKeys) {
|
|
40
|
+
data.apiKeys = [];
|
|
41
|
+
}
|
|
42
|
+
data.apiKeys.push(newKey);
|
|
43
|
+
await this.saveVault();
|
|
44
|
+
return rawKey;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Toggle API key enabled state
|
|
48
|
+
*/
|
|
49
|
+
async toggleApiKey(id, enabled) {
|
|
50
|
+
if (!this.isVaultUnlocked()) {
|
|
51
|
+
throw new Error('Vault is locked');
|
|
52
|
+
}
|
|
53
|
+
const data = this.getVaultData();
|
|
54
|
+
if (data.apiKeys) {
|
|
55
|
+
const idx = data.apiKeys.findIndex(k => k.id === id);
|
|
56
|
+
if (idx !== -1) {
|
|
57
|
+
data.apiKeys[idx].enabled = enabled;
|
|
58
|
+
await this.saveVault();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Delete an API key
|
|
64
|
+
*/
|
|
65
|
+
async deleteApiKey(id) {
|
|
66
|
+
if (!this.isVaultUnlocked()) {
|
|
67
|
+
throw new Error('Vault is locked');
|
|
68
|
+
}
|
|
69
|
+
const data = this.getVaultData();
|
|
70
|
+
if (data.apiKeys) {
|
|
71
|
+
data.apiKeys = data.apiKeys.filter(k => k.id !== id);
|
|
72
|
+
await this.saveVault();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Validate if an API key is valid and enabled
|
|
77
|
+
*/
|
|
78
|
+
validateApiKey(key) {
|
|
79
|
+
if (!this.isVaultUnlocked()) {
|
|
80
|
+
return false; // If vault is locked, API key is invalid
|
|
81
|
+
}
|
|
82
|
+
const keys = this.getVaultData().apiKeys || [];
|
|
83
|
+
const match = keys.find(k => k.key === key);
|
|
84
|
+
return !!(match && match.enabled);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=apikey.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apikey.service.js","sourceRoot":"","sources":["../../../src/modules/vault/apikey.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const defaultPlatforms = [
|
|
2
|
+
{ id: 'google', name: 'Google', icon: 'google', is_active: false },
|
|
3
|
+
{ id: 'facebook', name: 'Facebook', icon: 'facebook', is_active: false },
|
|
4
|
+
{ id: 'github', name: 'GitHub', icon: 'github', is_active: false },
|
|
5
|
+
{ id: 'outlook', name: 'Hotmail/Outlook', icon: 'outlook', is_active: false },
|
|
6
|
+
{ id: 'twitter', name: 'Twitter/X', icon: 'twitter', is_active: false },
|
|
7
|
+
{ id: 'threads', name: 'Threads', icon: 'threads', is_active: false },
|
|
8
|
+
{ id: 'aws', name: 'AWS', icon: 'aws', is_active: false },
|
|
9
|
+
{ id: 'apple', name: 'Apple', icon: 'apple', is_active: false },
|
|
10
|
+
{ id: 'tidbcloud', name: 'TiDB Cloud', icon: 'tidbcloud', is_active: false },
|
|
11
|
+
{ id: 'gmailworkspace', name: 'Gmail Workspace', icon: 'gmailworkspace', is_active: false },
|
|
12
|
+
{ id: 'vercel', name: 'Vercel', icon: 'vercel', is_active: false },
|
|
13
|
+
{ id: 'cloudinary', name: 'Cloudinary', icon: 'cloudinary', is_active: false },
|
|
14
|
+
{ id: 'tiktok', name: 'TikTok', icon: 'tiktok', is_active: false },
|
|
15
|
+
{ id: 'instagram', name: 'Instagram', icon: 'instagram', is_active: false },
|
|
16
|
+
{ id: 'shopee', name: 'Shopee', icon: 'shopee', is_active: false },
|
|
17
|
+
{ id: 'telegram', name: 'Telegram', icon: 'telegram', is_active: false },
|
|
18
|
+
{ id: 'riotgame', name: 'Riot Games', icon: 'riotgame', is_active: false },
|
|
19
|
+
{ id: 'vng', name: 'VNG', icon: 'vng', is_active: false },
|
|
20
|
+
{ id: 'reddit', name: 'Reddit', icon: 'reddit', is_active: false },
|
|
21
|
+
{ id: 'steam', name: 'Steam', icon: 'steam', is_active: false },
|
|
22
|
+
{ id: 'discord', name: 'Discord', icon: 'discord', is_active: false },
|
|
23
|
+
];
|
|
24
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/modules/vault/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;IAClE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;IACxE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;IAClE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;IAC7E,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;IACvE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;IACrE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IACzD,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE;IAC/D,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE;IAC5E,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE;IAC3F,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;IAClE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE;IAC9E,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;IAClE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE;IAC3E,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;IAClE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;IACxE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;IAC1E,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IACzD,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;IAClE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE;IAC/D,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;CACtE,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export interface Category {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
icon: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Platform {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
icon: string;
|
|
10
|
+
is_active: boolean;
|
|
11
|
+
is_custom?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface CustomField {
|
|
14
|
+
key: string;
|
|
15
|
+
value: string;
|
|
16
|
+
}
|
|
17
|
+
export interface Credential {
|
|
18
|
+
id: string;
|
|
19
|
+
uid: string;
|
|
20
|
+
title: string;
|
|
21
|
+
username: string;
|
|
22
|
+
email?: string;
|
|
23
|
+
password: string;
|
|
24
|
+
url: string;
|
|
25
|
+
totp_secret: string;
|
|
26
|
+
custom_fields: CustomField[];
|
|
27
|
+
notes: string;
|
|
28
|
+
category_id: string;
|
|
29
|
+
platform_id?: string;
|
|
30
|
+
is_favorite: boolean;
|
|
31
|
+
created_at: string;
|
|
32
|
+
updated_at: string;
|
|
33
|
+
}
|
|
34
|
+
export interface ApiKey {
|
|
35
|
+
id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
key: string;
|
|
38
|
+
keyPrefix: string;
|
|
39
|
+
createdAt: string;
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface Proxy {
|
|
43
|
+
id: string;
|
|
44
|
+
proxy: string;
|
|
45
|
+
host: string;
|
|
46
|
+
port: number;
|
|
47
|
+
username?: string;
|
|
48
|
+
password?: string;
|
|
49
|
+
status: 'active' | 'dead';
|
|
50
|
+
latency?: number;
|
|
51
|
+
ip?: string;
|
|
52
|
+
country?: string;
|
|
53
|
+
countryCode?: string;
|
|
54
|
+
city?: string;
|
|
55
|
+
isp?: string;
|
|
56
|
+
error?: string;
|
|
57
|
+
last_checked: string;
|
|
58
|
+
created_at: string;
|
|
59
|
+
updated_at: string;
|
|
60
|
+
}
|
|
61
|
+
export interface VaultData {
|
|
62
|
+
schemaVersion?: number;
|
|
63
|
+
user: {
|
|
64
|
+
password_hash: string;
|
|
65
|
+
password_salt: string;
|
|
66
|
+
password_hint?: string;
|
|
67
|
+
};
|
|
68
|
+
categories: Category[];
|
|
69
|
+
credentials: Credential[];
|
|
70
|
+
apiKeys?: ApiKey[];
|
|
71
|
+
platforms?: Platform[];
|
|
72
|
+
proxies?: Proxy[];
|
|
73
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/vault/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { VaultData } from './types.js';
|
|
2
|
+
export interface Migration {
|
|
3
|
+
version: number;
|
|
4
|
+
description: string;
|
|
5
|
+
migrate(data: VaultData): Promise<VaultData> | VaultData;
|
|
6
|
+
}
|
|
7
|
+
export declare class VaultMigrationService {
|
|
8
|
+
private migrations;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Register migrations in sequential order
|
|
12
|
+
*/
|
|
13
|
+
private registerMigrations;
|
|
14
|
+
/**
|
|
15
|
+
* Run all pending migrations sequentially based on the data schemaVersion
|
|
16
|
+
*/
|
|
17
|
+
migrate(vaultData: VaultData): Promise<{
|
|
18
|
+
migratedData: VaultData;
|
|
19
|
+
needsSave: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { logger } from '../../utils/logger.js';
|
|
2
|
+
import { defaultPlatforms } from './constants.js';
|
|
3
|
+
export class VaultMigrationService {
|
|
4
|
+
migrations = [];
|
|
5
|
+
constructor() {
|
|
6
|
+
this.registerMigrations();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Register migrations in sequential order
|
|
10
|
+
*/
|
|
11
|
+
registerMigrations() {
|
|
12
|
+
// Migration 1: Remove default categories (Work, Personal, Finance, Social) and reset references
|
|
13
|
+
this.migrations.push({
|
|
14
|
+
version: 1,
|
|
15
|
+
description: 'Remove default categories and reset credentials references',
|
|
16
|
+
migrate: (data) => {
|
|
17
|
+
if (data.categories) {
|
|
18
|
+
const hasDefaults = data.categories.some(c => ['1', '2', '3', '4'].includes(c.id));
|
|
19
|
+
if (hasDefaults) {
|
|
20
|
+
data.categories = data.categories.filter(c => !['1', '2', '3', '4'].includes(c.id));
|
|
21
|
+
if (data.credentials) {
|
|
22
|
+
data.credentials.forEach(c => {
|
|
23
|
+
if (['1', '2', '3', '4'].includes(c.category_id)) {
|
|
24
|
+
c.category_id = '';
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
logger.info('Migration v1: Default categories removed and credentials updated.');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
// Migration 2: Ensure platforms array exists and has all default platforms
|
|
35
|
+
this.migrations.push({
|
|
36
|
+
version: 2,
|
|
37
|
+
description: 'Ensure default platforms list is populated',
|
|
38
|
+
migrate: (data) => {
|
|
39
|
+
if (!data.platforms) {
|
|
40
|
+
data.platforms = [];
|
|
41
|
+
}
|
|
42
|
+
let addedAny = false;
|
|
43
|
+
defaultPlatforms.forEach(dp => {
|
|
44
|
+
const exists = data.platforms.some(p => p.id === dp.id);
|
|
45
|
+
if (!exists) {
|
|
46
|
+
data.platforms.push(dp);
|
|
47
|
+
addedAny = true;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
if (addedAny) {
|
|
51
|
+
logger.info('Migration v2: Default platforms successfully synced.');
|
|
52
|
+
}
|
|
53
|
+
return data;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
// Migration 3: Ensure proxies array exists
|
|
57
|
+
this.migrations.push({
|
|
58
|
+
version: 3,
|
|
59
|
+
description: 'Ensure proxies list is initialized',
|
|
60
|
+
migrate: (data) => {
|
|
61
|
+
if (!data.proxies) {
|
|
62
|
+
data.proxies = [];
|
|
63
|
+
}
|
|
64
|
+
return data;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Run all pending migrations sequentially based on the data schemaVersion
|
|
70
|
+
*/
|
|
71
|
+
async migrate(vaultData) {
|
|
72
|
+
const currentVersion = vaultData.schemaVersion || 0;
|
|
73
|
+
let data = { ...vaultData };
|
|
74
|
+
let needsSave = false;
|
|
75
|
+
// Filter migrations that are newer than currentVersion
|
|
76
|
+
const pendingMigrations = this.migrations
|
|
77
|
+
.filter(m => m.version > currentVersion)
|
|
78
|
+
.sort((a, b) => a.version - b.version);
|
|
79
|
+
if (pendingMigrations.length === 0) {
|
|
80
|
+
return { migratedData: data, needsSave: false };
|
|
81
|
+
}
|
|
82
|
+
logger.info(`Starting vault database migration from version ${currentVersion}...`);
|
|
83
|
+
for (const migration of pendingMigrations) {
|
|
84
|
+
logger.info(`Running migration v${migration.version}: ${migration.description}`);
|
|
85
|
+
try {
|
|
86
|
+
data = await migration.migrate(data);
|
|
87
|
+
data.schemaVersion = migration.version;
|
|
88
|
+
needsSave = true;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
logger.error(`Failed executing migration v${migration.version}:`, error.message);
|
|
92
|
+
throw new Error(`Migration v${migration.version} failed: ${error.message}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
logger.info(`Migration completed successfully. Vault schema version updated to ${data.schemaVersion}.`);
|
|
96
|
+
return { migratedData: data, needsSave };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=vault-migration.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-migration.service.js","sourceRoot":"","sources":["../../../src/modules/vault/vault-migration.service.ts"],"names":[],"mappings":"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"}
|