fivocell 6.0.3 → 6.2.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/__tests__/archive-versioning.test.d.ts +2 -0
- package/dist/__tests__/archive-versioning.test.d.ts.map +1 -0
- package/dist/__tests__/archive-versioning.test.js +131 -0
- package/dist/__tests__/archive-versioning.test.js.map +1 -0
- package/dist/__tests__/blob-vault.test.d.ts +2 -0
- package/dist/__tests__/blob-vault.test.d.ts.map +1 -0
- package/dist/__tests__/blob-vault.test.js +125 -0
- package/dist/__tests__/blob-vault.test.js.map +1 -0
- package/dist/__tests__/cell-mirror.test.d.ts +2 -0
- package/dist/__tests__/cell-mirror.test.d.ts.map +1 -0
- package/dist/__tests__/cell-mirror.test.js +122 -0
- package/dist/__tests__/cell-mirror.test.js.map +1 -0
- package/dist/__tests__/context-pipeline.test.d.ts +2 -0
- package/dist/__tests__/context-pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/context-pipeline.test.js +119 -0
- package/dist/__tests__/context-pipeline.test.js.map +1 -0
- package/dist/__tests__/key-provider.test.d.ts +2 -0
- package/dist/__tests__/key-provider.test.d.ts.map +1 -0
- package/dist/__tests__/key-provider.test.js +74 -0
- package/dist/__tests__/key-provider.test.js.map +1 -0
- package/dist/walls/06-memory/archive/archive-versioning.d.ts +33 -0
- package/dist/walls/06-memory/archive/archive-versioning.d.ts.map +1 -0
- package/dist/walls/06-memory/archive/archive-versioning.js +201 -0
- package/dist/walls/06-memory/archive/archive-versioning.js.map +1 -0
- package/dist/walls/06-memory/archive/blob-vault.d.ts +47 -0
- package/dist/walls/06-memory/archive/blob-vault.d.ts.map +1 -0
- package/dist/walls/06-memory/archive/blob-vault.js +289 -0
- package/dist/walls/06-memory/archive/blob-vault.js.map +1 -0
- package/dist/walls/06-memory/archive/memory-archive.d.ts.map +1 -1
- package/dist/walls/06-memory/archive/memory-archive.js +29 -5
- package/dist/walls/06-memory/archive/memory-archive.js.map +1 -1
- package/dist/walls/06-memory/mirror/cell-mirror.d.ts +32 -0
- package/dist/walls/06-memory/mirror/cell-mirror.d.ts.map +1 -0
- package/dist/walls/06-memory/mirror/cell-mirror.js +380 -0
- package/dist/walls/06-memory/mirror/cell-mirror.js.map +1 -0
- package/dist/walls/06-memory/privacy/key-migration.d.ts +14 -0
- package/dist/walls/06-memory/privacy/key-migration.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/key-migration.js +124 -0
- package/dist/walls/06-memory/privacy/key-migration.js.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider-file.d.ts +9 -0
- package/dist/walls/06-memory/privacy/key-provider-file.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider-file.js +129 -0
- package/dist/walls/06-memory/privacy/key-provider-file.js.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider-os.d.ts +28 -0
- package/dist/walls/06-memory/privacy/key-provider-os.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider-os.js +225 -0
- package/dist/walls/06-memory/privacy/key-provider-os.js.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider.d.ts +38 -0
- package/dist/walls/06-memory/privacy/key-provider.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider.js +135 -0
- package/dist/walls/06-memory/privacy/key-provider.js.map +1 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.d.ts +36 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.d.ts.map +1 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.js +321 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.js.map +1 -0
- package/dist/walls/06-memory/stores/memory-search.d.ts +12 -0
- package/dist/walls/06-memory/stores/memory-search.d.ts.map +1 -1
- package/dist/walls/06-memory/stores/memory-search.js +51 -2
- package/dist/walls/06-memory/stores/memory-search.js.map +1 -1
- package/dist/walls/06-memory/stores/sync-engine.d.ts.map +1 -1
- package/dist/walls/06-memory/stores/sync-engine.js +15 -0
- package/dist/walls/06-memory/stores/sync-engine.js.map +1 -1
- package/dist/walls/07-runtime/cli/cli.js +254 -0
- package/dist/walls/07-runtime/cli/cli.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.migrateKey = migrateKey;
|
|
37
|
+
exports.getMigrationStatus = getMigrationStatus;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
const key_provider_1 = require("./key-provider");
|
|
42
|
+
// ============================================================
|
|
43
|
+
// key-migration.ts — Migrate old file keys to new provider
|
|
44
|
+
//
|
|
45
|
+
// Migration flow:
|
|
46
|
+
// 1. Check if new provider has key → done
|
|
47
|
+
// 2. Check old file key (~/.fivo/cell/keys/local.key) → migrate
|
|
48
|
+
// 3. Check project-local key (.cell/private/.archive.key) → migrate
|
|
49
|
+
// 4. Keep old files as backup (don't delete)
|
|
50
|
+
// ============================================================
|
|
51
|
+
const KEY_ID = 'fivocell-archive';
|
|
52
|
+
function getOldGlobalKeyPath() {
|
|
53
|
+
return path.join(os.homedir(), '.fivo', 'cell', 'keys', 'local.key');
|
|
54
|
+
}
|
|
55
|
+
function getOldProjectKeyPath(projectDir) {
|
|
56
|
+
return path.join(projectDir, '.cell', 'private', '.archive.key');
|
|
57
|
+
}
|
|
58
|
+
function migrateKey(projectDir) {
|
|
59
|
+
const provider = (0, key_provider_1.getKeyProvider)();
|
|
60
|
+
// 1. Check if provider already has the key
|
|
61
|
+
const existing = (0, key_provider_1.getKey)(KEY_ID);
|
|
62
|
+
if (existing) {
|
|
63
|
+
return {
|
|
64
|
+
migrated: false,
|
|
65
|
+
source: 'os-store',
|
|
66
|
+
provider: provider.name,
|
|
67
|
+
message: `Key already exists in ${provider.name}`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// 2. Try old global file key
|
|
71
|
+
const oldGlobalPath = getOldGlobalKeyPath();
|
|
72
|
+
if (fs.existsSync(oldGlobalPath)) {
|
|
73
|
+
try {
|
|
74
|
+
const raw = fs.readFileSync(oldGlobalPath, 'utf-8').trim();
|
|
75
|
+
const key = Buffer.from(raw, 'hex');
|
|
76
|
+
if (key.length === 32) {
|
|
77
|
+
(0, key_provider_1.setKey)(KEY_ID, key);
|
|
78
|
+
return {
|
|
79
|
+
migrated: true,
|
|
80
|
+
source: 'global-file',
|
|
81
|
+
provider: provider.name,
|
|
82
|
+
message: `Migrated from ${oldGlobalPath} to ${provider.name}`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch { /* corrupt file, continue */ }
|
|
87
|
+
}
|
|
88
|
+
// 3. Try old project-local key
|
|
89
|
+
const oldProjectPath = getOldProjectKeyPath(projectDir);
|
|
90
|
+
if (fs.existsSync(oldProjectPath)) {
|
|
91
|
+
try {
|
|
92
|
+
const raw = fs.readFileSync(oldProjectPath, 'utf-8').trim();
|
|
93
|
+
const key = Buffer.from(raw, 'hex');
|
|
94
|
+
if (key.length === 32) {
|
|
95
|
+
(0, key_provider_1.setKey)(KEY_ID, key);
|
|
96
|
+
return {
|
|
97
|
+
migrated: true,
|
|
98
|
+
source: 'project-file',
|
|
99
|
+
provider: provider.name,
|
|
100
|
+
message: `Migrated from ${oldProjectPath} to ${provider.name}`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch { /* corrupt file, continue */ }
|
|
105
|
+
}
|
|
106
|
+
// 4. No existing key found — will be created on first use
|
|
107
|
+
return {
|
|
108
|
+
migrated: false,
|
|
109
|
+
source: 'none',
|
|
110
|
+
provider: provider.name,
|
|
111
|
+
message: 'No existing key found. New key will be created on first use.',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function getMigrationStatus() {
|
|
115
|
+
const existing = (0, key_provider_1.getKey)(KEY_ID);
|
|
116
|
+
const oldGlobal = fs.existsSync(getOldGlobalKeyPath());
|
|
117
|
+
return {
|
|
118
|
+
newProviderHas: !!existing,
|
|
119
|
+
oldGlobalExists: oldGlobal,
|
|
120
|
+
oldProjectExists: false, // checked per-project
|
|
121
|
+
needsMigration: !existing && oldGlobal,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=key-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-migration.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { KeyProvider } from './key-provider';
|
|
2
|
+
export declare class FileKeyProvider implements KeyProvider {
|
|
3
|
+
name: string;
|
|
4
|
+
isAvailable(): boolean;
|
|
5
|
+
getKey(id: string): Buffer | null;
|
|
6
|
+
setKey(id: string, key: Buffer): boolean;
|
|
7
|
+
deleteKey(id: string): boolean;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=key-provider-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider-file.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AA0C/D,qBAAa,eAAgB,YAAW,WAAW;IACjD,IAAI,SAAoB;IAExB,WAAW,IAAI,OAAO;IAQtB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWjC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAYxC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAO/B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.FileKeyProvider = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
const key_provider_1 = require("./key-provider");
|
|
42
|
+
// ============================================================
|
|
43
|
+
// key-provider-file.ts — Machine-bound encrypted file provider
|
|
44
|
+
//
|
|
45
|
+
// Stores keys as AES-256-GCM encrypted files
|
|
46
|
+
// Encryption key is derived from hostname + username
|
|
47
|
+
// So the file is only readable on this machine
|
|
48
|
+
// ============================================================
|
|
49
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
50
|
+
const IV_LENGTH = 16;
|
|
51
|
+
const TAG_LENGTH = 16;
|
|
52
|
+
function getKeysDir() {
|
|
53
|
+
return path.join(os.homedir(), '.fivo', 'cell', 'keys');
|
|
54
|
+
}
|
|
55
|
+
function getKeyPath(id) {
|
|
56
|
+
// Sanitize ID for filename
|
|
57
|
+
const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
58
|
+
return path.join(getKeysDir(), `${safeId}.enc`);
|
|
59
|
+
}
|
|
60
|
+
function encrypt(data, key) {
|
|
61
|
+
const iv = crypto.randomBytes(IV_LENGTH);
|
|
62
|
+
const cipher = crypto.createCipheriv(ALGORITHM, key, iv, { authTagLength: TAG_LENGTH });
|
|
63
|
+
const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);
|
|
64
|
+
const authTag = cipher.getAuthTag();
|
|
65
|
+
// Format: iv(16) + authTag(16) + encrypted
|
|
66
|
+
return Buffer.concat([iv, authTag, encrypted]);
|
|
67
|
+
}
|
|
68
|
+
function decrypt(data, key) {
|
|
69
|
+
const iv = data.subarray(0, IV_LENGTH);
|
|
70
|
+
const authTag = data.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);
|
|
71
|
+
const encrypted = data.subarray(IV_LENGTH + TAG_LENGTH);
|
|
72
|
+
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv, { authTagLength: TAG_LENGTH });
|
|
73
|
+
decipher.setAuthTag(authTag);
|
|
74
|
+
return Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
75
|
+
}
|
|
76
|
+
class FileKeyProvider {
|
|
77
|
+
name = 'file-encrypted';
|
|
78
|
+
isAvailable() {
|
|
79
|
+
try {
|
|
80
|
+
const dir = getKeysDir();
|
|
81
|
+
if (!fs.existsSync(dir))
|
|
82
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
getKey(id) {
|
|
90
|
+
const keyPath = getKeyPath(id);
|
|
91
|
+
if (!fs.existsSync(keyPath))
|
|
92
|
+
return null;
|
|
93
|
+
try {
|
|
94
|
+
const encrypted = fs.readFileSync(keyPath);
|
|
95
|
+
const machineKey = (0, key_provider_1.deriveMachineKey)();
|
|
96
|
+
return decrypt(encrypted, machineKey);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
setKey(id, key) {
|
|
103
|
+
try {
|
|
104
|
+
const dir = getKeysDir();
|
|
105
|
+
if (!fs.existsSync(dir))
|
|
106
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
107
|
+
const machineKey = (0, key_provider_1.deriveMachineKey)();
|
|
108
|
+
const encrypted = encrypt(key, machineKey);
|
|
109
|
+
fs.writeFileSync(getKeyPath(id), encrypted);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
deleteKey(id) {
|
|
117
|
+
try {
|
|
118
|
+
const keyPath = getKeyPath(id);
|
|
119
|
+
if (fs.existsSync(keyPath))
|
|
120
|
+
fs.unlinkSync(keyPath);
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.FileKeyProvider = FileKeyProvider;
|
|
129
|
+
//# sourceMappingURL=key-provider-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider-file.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { KeyProvider } from './key-provider';
|
|
2
|
+
export declare class OSKeyProvider implements KeyProvider {
|
|
3
|
+
name: string;
|
|
4
|
+
private osType;
|
|
5
|
+
isAvailable(): boolean;
|
|
6
|
+
healthCheck(): {
|
|
7
|
+
available: boolean;
|
|
8
|
+
os: string;
|
|
9
|
+
method: string;
|
|
10
|
+
details: string;
|
|
11
|
+
};
|
|
12
|
+
private isWindowsAvailable;
|
|
13
|
+
private windowsGetKey;
|
|
14
|
+
private windowsSetKey;
|
|
15
|
+
private windowsDeleteKey;
|
|
16
|
+
private isMacOSAvailable;
|
|
17
|
+
private macosGetKey;
|
|
18
|
+
private macosSetKey;
|
|
19
|
+
private macosDeleteKey;
|
|
20
|
+
private isLinuxAvailable;
|
|
21
|
+
private linuxGetKey;
|
|
22
|
+
private linuxSetKey;
|
|
23
|
+
private linuxDeleteKey;
|
|
24
|
+
getKey(id: string): Buffer | null;
|
|
25
|
+
setKey(id: string, key: Buffer): boolean;
|
|
26
|
+
deleteKey(id: string): boolean;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=key-provider-os.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider-os.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider-os.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAY,MAAM,gBAAgB,CAAC;AAYvD,qBAAa,aAAc,YAAW,WAAW;IAC/C,IAAI,SAAe;IACnB,OAAO,CAAC,MAAM,CAAc;IAE5B,WAAW,IAAI,OAAO;IAWtB,WAAW,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAmBlF,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IActB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IASxC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAQ/B"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OSKeyProvider = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const key_provider_1 = require("./key-provider");
|
|
6
|
+
// ============================================================
|
|
7
|
+
// key-provider-os.ts — OS-native key storage provider
|
|
8
|
+
//
|
|
9
|
+
// Windows: DPAPI via ConvertFrom-Clixml (real encryption, not hex file)
|
|
10
|
+
// macOS: security (Keychain CLI)
|
|
11
|
+
// Linux: secret-tool (GNOME Keyring / KWallet)
|
|
12
|
+
//
|
|
13
|
+
// All use CLI wrappers — no native npm modules needed
|
|
14
|
+
// ============================================================
|
|
15
|
+
class OSKeyProvider {
|
|
16
|
+
name = 'os-native';
|
|
17
|
+
osType = (0, key_provider_1.detectOS)();
|
|
18
|
+
isAvailable() {
|
|
19
|
+
try {
|
|
20
|
+
switch (this.osType) {
|
|
21
|
+
case 'windows': return this.isWindowsAvailable();
|
|
22
|
+
case 'macos': return this.isMacOSAvailable();
|
|
23
|
+
case 'linux': return this.isLinuxAvailable();
|
|
24
|
+
default: return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
healthCheck() {
|
|
32
|
+
const available = this.isAvailable();
|
|
33
|
+
switch (this.osType) {
|
|
34
|
+
case 'windows':
|
|
35
|
+
return { available, os: 'windows', method: 'DPAPI-SecureString', details: available ? 'PowerShell ConvertTo-SecureString/ConvertFrom-SecureString' : 'PowerShell not available' };
|
|
36
|
+
case 'macos':
|
|
37
|
+
return { available, os: 'macos', method: 'Keychain', details: available ? 'security CLI available' : 'security CLI not found' };
|
|
38
|
+
case 'linux':
|
|
39
|
+
return { available, os: 'linux', method: 'SecretService', details: available ? 'secret-tool available' : 'secret-tool not found' };
|
|
40
|
+
default:
|
|
41
|
+
return { available: false, os: 'unknown', method: 'none', details: 'Unsupported OS' };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// ============================================================
|
|
45
|
+
// Windows — DPAPI via ConvertFrom-SecureString
|
|
46
|
+
// Uses current user's DPAPI scope — keys only readable by same user on same machine
|
|
47
|
+
// ============================================================
|
|
48
|
+
isWindowsAvailable() {
|
|
49
|
+
try {
|
|
50
|
+
(0, child_process_1.execSync)('powershell -Command "ConvertTo-SecureString -String test -AsPlainText -Force"', {
|
|
51
|
+
encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
|
|
52
|
+
});
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
windowsGetKey(id) {
|
|
60
|
+
try {
|
|
61
|
+
const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
62
|
+
// Read the DPAPI-encrypted string from file, then decrypt with current user scope
|
|
63
|
+
const cmd = `powershell -Command "$enc = Get-Content -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.dpapi' -ErrorAction Stop; $sec = ConvertTo-SecureString $enc; [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec))"`;
|
|
64
|
+
const hex = (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim();
|
|
65
|
+
if (!hex)
|
|
66
|
+
return null;
|
|
67
|
+
return Buffer.from(hex, 'hex');
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
windowsSetKey(id, key) {
|
|
74
|
+
try {
|
|
75
|
+
const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
76
|
+
// Convert hex to SecureString (DPAPI-encrypted in current user scope), then save
|
|
77
|
+
const hex = key.toString('hex');
|
|
78
|
+
const cmd = `powershell -Command "New-Item -Path '$env:USERPROFILE\\.fivo\\cell\\keys' -ItemType Directory -Force | Out-Null; $sec = ConvertTo-SecureString '${hex}' -AsPlainText -Force; $enc = ConvertFrom-SecureString $sec; Set-Content -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.dpapi' -Value $enc -Force"`;
|
|
79
|
+
(0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
80
|
+
// Clean up old hex file if it exists
|
|
81
|
+
try {
|
|
82
|
+
const fs = require('fs');
|
|
83
|
+
const oldPath = require('path').join(require('os').homedir(), '.fivo', 'cell', 'keys', `os-${safeId}.txt`);
|
|
84
|
+
if (fs.existsSync(oldPath))
|
|
85
|
+
fs.unlinkSync(oldPath);
|
|
86
|
+
}
|
|
87
|
+
catch { /* ignore */ }
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
windowsDeleteKey(id) {
|
|
95
|
+
try {
|
|
96
|
+
const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
97
|
+
const cmd = `powershell -Command "Remove-Item -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.dpapi' -Force -ErrorAction SilentlyContinue; Remove-Item -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.txt' -Force -ErrorAction SilentlyContinue"`;
|
|
98
|
+
(0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// ============================================================
|
|
106
|
+
// macOS — Keychain CLI
|
|
107
|
+
// ============================================================
|
|
108
|
+
isMacOSAvailable() {
|
|
109
|
+
try {
|
|
110
|
+
(0, child_process_1.execSync)('which security', { encoding: 'utf-8', timeout: 3000, stdio: 'pipe' });
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
macosGetKey(id) {
|
|
118
|
+
try {
|
|
119
|
+
const result = (0, child_process_1.execSync)(`security find-generic-password -a fivocell -s "cell-${id}" -w 2>/dev/null`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim();
|
|
120
|
+
if (!result)
|
|
121
|
+
return null;
|
|
122
|
+
return Buffer.from(result, 'hex');
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
macosSetKey(id, key) {
|
|
129
|
+
try {
|
|
130
|
+
try {
|
|
131
|
+
(0, child_process_1.execSync)(`security delete-generic-password -a fivocell -s "cell-${id}" 2>/dev/null`, {
|
|
132
|
+
encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
catch { /* ignore */ }
|
|
136
|
+
(0, child_process_1.execSync)(`security add-generic-password -a fivocell -s "cell-${id}" -w "${key.toString('hex')}" -U`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
macosDeleteKey(id) {
|
|
144
|
+
try {
|
|
145
|
+
(0, child_process_1.execSync)(`security delete-generic-password -a fivocell -s "cell-${id}" 2>/dev/null`, {
|
|
146
|
+
encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
|
|
147
|
+
});
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// ============================================================
|
|
155
|
+
// Linux — secret-tool (GNOME Keyring)
|
|
156
|
+
// ============================================================
|
|
157
|
+
isLinuxAvailable() {
|
|
158
|
+
try {
|
|
159
|
+
(0, child_process_1.execSync)('which secret-tool', { encoding: 'utf-8', timeout: 3000, stdio: 'pipe' });
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
linuxGetKey(id) {
|
|
167
|
+
try {
|
|
168
|
+
const result = (0, child_process_1.execSync)(`secret-tool lookup service fivocell id "${id}"`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim();
|
|
169
|
+
if (!result)
|
|
170
|
+
return null;
|
|
171
|
+
return Buffer.from(result, 'hex');
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
linuxSetKey(id, key) {
|
|
178
|
+
try {
|
|
179
|
+
const cmd = `echo -n "${key.toString('hex')}" | secret-tool store --label="Fivo Cell ${id}" service fivocell id "${id}"`;
|
|
180
|
+
(0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe', shell: '/bin/bash' });
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
linuxDeleteKey(id) {
|
|
188
|
+
try {
|
|
189
|
+
(0, child_process_1.execSync)(`secret-tool clear service fivocell id "${id}"`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// ============================================================
|
|
197
|
+
// Unified interface
|
|
198
|
+
// ============================================================
|
|
199
|
+
getKey(id) {
|
|
200
|
+
switch (this.osType) {
|
|
201
|
+
case 'windows': return this.windowsGetKey(id);
|
|
202
|
+
case 'macos': return this.macosGetKey(id);
|
|
203
|
+
case 'linux': return this.linuxGetKey(id);
|
|
204
|
+
default: return null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
setKey(id, key) {
|
|
208
|
+
switch (this.osType) {
|
|
209
|
+
case 'windows': return this.windowsSetKey(id, key);
|
|
210
|
+
case 'macos': return this.macosSetKey(id, key);
|
|
211
|
+
case 'linux': return this.linuxSetKey(id, key);
|
|
212
|
+
default: return false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
deleteKey(id) {
|
|
216
|
+
switch (this.osType) {
|
|
217
|
+
case 'windows': return this.windowsDeleteKey(id);
|
|
218
|
+
case 'macos': return this.macosDeleteKey(id);
|
|
219
|
+
case 'linux': return this.linuxDeleteKey(id);
|
|
220
|
+
default: return false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
exports.OSKeyProvider = OSKeyProvider;
|
|
225
|
+
//# sourceMappingURL=key-provider-os.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider-os.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider-os.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface KeyProvider {
|
|
2
|
+
name: string;
|
|
3
|
+
isAvailable(): boolean;
|
|
4
|
+
getKey(id: string): Buffer | null;
|
|
5
|
+
setKey(id: string, key: Buffer): boolean;
|
|
6
|
+
deleteKey(id: string): boolean;
|
|
7
|
+
healthCheck?(): {
|
|
8
|
+
available: boolean;
|
|
9
|
+
os: string;
|
|
10
|
+
method: string;
|
|
11
|
+
details: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export type OSType = 'windows' | 'macos' | 'linux' | 'unknown';
|
|
15
|
+
export declare function detectOS(): OSType;
|
|
16
|
+
export declare function deriveMachineKey(): Buffer;
|
|
17
|
+
export declare function getKeyProvider(): KeyProvider;
|
|
18
|
+
export declare function getKey(id: string): Buffer | null;
|
|
19
|
+
export declare function setKey(id: string, key: Buffer): boolean;
|
|
20
|
+
export declare function deleteKey(id: string): boolean;
|
|
21
|
+
export declare function getOrCreateKey(id: string, keyLength?: number): Buffer;
|
|
22
|
+
export declare function getKeyProviderInfo(): {
|
|
23
|
+
name: string;
|
|
24
|
+
os: OSType;
|
|
25
|
+
available: boolean;
|
|
26
|
+
};
|
|
27
|
+
export declare function getProviderHealthCheck(): {
|
|
28
|
+
name: string;
|
|
29
|
+
os: OSType;
|
|
30
|
+
available: boolean;
|
|
31
|
+
health?: {
|
|
32
|
+
available: boolean;
|
|
33
|
+
os: string;
|
|
34
|
+
method: string;
|
|
35
|
+
details: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=key-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,IAAI,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,WAAW,CAAC,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;AAED,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,wBAAgB,QAAQ,IAAI,MAAM,CAOjC;AAUD,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC;AAuBD,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAMD,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAOzE;AAED,wBAAgB,kBAAkB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAQrF;AAED,wBAAgB,sBAAsB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CASvK"}
|