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.
Files changed (70) hide show
  1. package/dist/cli.d.ts +2 -0
  2. package/dist/cli.js +107 -0
  3. package/dist/cli.js.map +1 -0
  4. package/dist/frontend/assets/index-D0IIAYWB.css +1 -0
  5. package/dist/frontend/assets/index-D9Y0_s3b.js +273 -0
  6. package/dist/frontend/index.html +26 -0
  7. package/dist/middleware/auth.middleware.d.ts +8 -0
  8. package/dist/middleware/auth.middleware.js +51 -0
  9. package/dist/middleware/auth.middleware.js.map +1 -0
  10. package/dist/middleware/error.middleware.d.ts +2 -0
  11. package/dist/middleware/error.middleware.js +11 -0
  12. package/dist/middleware/error.middleware.js.map +1 -0
  13. package/dist/modules/auth/auth.controller.d.ts +1 -0
  14. package/dist/modules/auth/auth.controller.js +175 -0
  15. package/dist/modules/auth/auth.controller.js.map +1 -0
  16. package/dist/modules/credential/credential.controller.d.ts +1 -0
  17. package/dist/modules/credential/credential.controller.js +263 -0
  18. package/dist/modules/credential/credential.controller.js.map +1 -0
  19. package/dist/modules/proxy/proxy.controller.d.ts +1 -0
  20. package/dist/modules/proxy/proxy.controller.js +270 -0
  21. package/dist/modules/proxy/proxy.controller.js.map +1 -0
  22. package/dist/modules/proxy/proxy.service.d.ts +28 -0
  23. package/dist/modules/proxy/proxy.service.js +185 -0
  24. package/dist/modules/proxy/proxy.service.js.map +1 -0
  25. package/dist/modules/tailscale/tailscale.controller.d.ts +1 -0
  26. package/dist/modules/tailscale/tailscale.controller.js +149 -0
  27. package/dist/modules/tailscale/tailscale.controller.js.map +1 -0
  28. package/dist/modules/tailscale/tailscale.service.d.ts +96 -0
  29. package/dist/modules/tailscale/tailscale.service.js +561 -0
  30. package/dist/modules/tailscale/tailscale.service.js.map +1 -0
  31. package/dist/modules/totp/totp.controller.d.ts +1 -0
  32. package/dist/modules/totp/totp.controller.js +41 -0
  33. package/dist/modules/totp/totp.controller.js.map +1 -0
  34. package/dist/modules/totp/totp.service.d.ts +26 -0
  35. package/dist/modules/totp/totp.service.js +96 -0
  36. package/dist/modules/totp/totp.service.js.map +1 -0
  37. package/dist/modules/totp/totp.service.test.d.ts +1 -0
  38. package/dist/modules/totp/totp.service.test.js +41 -0
  39. package/dist/modules/totp/totp.service.test.js.map +1 -0
  40. package/dist/modules/vault/apikey.service.d.ts +27 -0
  41. package/dist/modules/vault/apikey.service.js +87 -0
  42. package/dist/modules/vault/apikey.service.js.map +1 -0
  43. package/dist/modules/vault/constants.d.ts +2 -0
  44. package/dist/modules/vault/constants.js +24 -0
  45. package/dist/modules/vault/constants.js.map +1 -0
  46. package/dist/modules/vault/types.d.ts +73 -0
  47. package/dist/modules/vault/types.js +2 -0
  48. package/dist/modules/vault/types.js.map +1 -0
  49. package/dist/modules/vault/vault-migration.service.d.ts +21 -0
  50. package/dist/modules/vault/vault-migration.service.js +99 -0
  51. package/dist/modules/vault/vault-migration.service.js.map +1 -0
  52. package/dist/modules/vault/vault-storage.service.d.ts +22 -0
  53. package/dist/modules/vault/vault-storage.service.js +76 -0
  54. package/dist/modules/vault/vault-storage.service.js.map +1 -0
  55. package/dist/modules/vault/vault.service.d.ts +66 -0
  56. package/dist/modules/vault/vault.service.js +229 -0
  57. package/dist/modules/vault/vault.service.js.map +1 -0
  58. package/dist/server.d.ts +1 -0
  59. package/dist/server.js +67 -0
  60. package/dist/server.js.map +1 -0
  61. package/dist/utils/crypto.d.ts +20 -0
  62. package/dist/utils/crypto.js +54 -0
  63. package/dist/utils/crypto.js.map +1 -0
  64. package/dist/utils/crypto.test.d.ts +1 -0
  65. package/dist/utils/crypto.test.js +66 -0
  66. package/dist/utils/crypto.test.js.map +1 -0
  67. package/dist/utils/logger.d.ts +5 -0
  68. package/dist/utils/logger.js +12 -0
  69. package/dist/utils/logger.js.map +1 -0
  70. 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":"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"}
@@ -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,2 @@
1
+ import type { Platform } from './types.js';
2
+ export declare const defaultPlatforms: Platform[];
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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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"}