fraim-hub 2.0.249 → 2.0.251
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.
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.certPaths = certPaths;
|
|
6
7
|
exports.loadOrCreateCert = loadOrCreateCert;
|
|
7
8
|
exports.trustCert = trustCert;
|
|
8
9
|
const fs_1 = __importDefault(require("fs"));
|
|
@@ -40,27 +41,24 @@ async function loadOrCreateCert() {
|
|
|
40
41
|
fs_1.default.mkdirSync(path_1.default.dirname(keyPath), { recursive: true });
|
|
41
42
|
fs_1.default.writeFileSync(keyPath, pem.private, { mode: 0o600 });
|
|
42
43
|
fs_1.default.writeFileSync(certPath, pem.cert, { mode: 0o644 });
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
// Trusting a root CA triggers a Windows security popup on every add/remove and is
|
|
46
|
-
// invasive, so it is reserved for explicit Word-Online opt-in via trustCert() below.
|
|
44
|
+
// The caller decides when to trust this certificate. Word Online requires the
|
|
45
|
+
// HTTPS loopback certificate to be trusted before it can render the task pane.
|
|
47
46
|
return { key: pem.private, cert: pem.cert };
|
|
48
47
|
}
|
|
49
48
|
/**
|
|
50
49
|
* Installs the cert as a trusted root CA in the user's OS certificate store.
|
|
51
50
|
* ONLY call this for explicit Word-Online support — it prompts a Windows security
|
|
52
|
-
* dialog. It
|
|
53
|
-
*
|
|
54
|
-
* Windows: certutil -addstore -user Root
|
|
51
|
+
* dialog. It never deletes certs; importing the same cert is idempotent in the
|
|
52
|
+
* user root store and also repairs stale installs when the cached cert changed.
|
|
53
|
+
* Windows: certutil -addstore -user Root
|
|
55
54
|
* macOS: security add-trusted-cert -r trustRoot -k login.keychain
|
|
56
55
|
*/
|
|
57
56
|
function trustCert(certPath) {
|
|
58
57
|
if (process.platform === 'win32') {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
(0, child_process_1.spawnSync)('certutil', ['-addstore', '-user', 'Root', certPath], { stdio: 'ignore' });
|
|
58
|
+
const result = (0, child_process_1.spawnSync)('certutil', ['-addstore', '-user', 'Root', certPath], { encoding: 'utf8' });
|
|
59
|
+
if (result.status !== 0) {
|
|
60
|
+
console.warn('[fraim] could not trust localhost certificate:', result.stderr || result.stdout);
|
|
61
|
+
}
|
|
64
62
|
return;
|
|
65
63
|
}
|
|
66
64
|
if (process.platform === 'darwin') {
|
|
@@ -105,7 +105,8 @@ function ensureWordSideload(projectPath, httpPort) {
|
|
|
105
105
|
const FLAG_VERSION = 'v4-dynamic-port';
|
|
106
106
|
const expectedFlag = `${FLAG_VERSION}:${httpPort}`;
|
|
107
107
|
const flagPath = path_1.default.join(electron_1.app.getPath('userData'), 'word-sideloaded.flag');
|
|
108
|
-
|
|
108
|
+
const existingFlag = fs_1.default.existsSync(flagPath) ? fs_1.default.readFileSync(flagPath, 'utf8') : null;
|
|
109
|
+
if ((0, office_sideload_1.shouldSkipSideloadForFlag)(existingFlag, expectedFlag, (0, office_sideload_1.isSideloaded)()))
|
|
109
110
|
return;
|
|
110
111
|
if (httpPort > 0) {
|
|
111
112
|
const result = (0, office_sideload_1.sideloadManifest)(projectPath, { httpPort, userDataDir: electron_1.app.getPath('userData') });
|
|
@@ -325,6 +326,12 @@ async function launchDesktopShell(options) {
|
|
|
325
326
|
// Generate (or load cached) self-signed cert for HTTPS.
|
|
326
327
|
// Fast on subsequent launches (file read); ~200ms on first launch (key gen).
|
|
327
328
|
const certBundle = await (0, cert_store_1.loadOrCreateCert)();
|
|
329
|
+
try {
|
|
330
|
+
(0, cert_store_1.trustCert)((0, cert_store_1.certPaths)().certPath);
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
console.warn('[fraim] could not trust localhost certificate:', err);
|
|
334
|
+
}
|
|
328
335
|
server = new server_1.AiHubServer({
|
|
329
336
|
...(options.projectPath ? { projectPath: options.projectPath } : {}),
|
|
330
337
|
// Issue #701: no local DB. Persona/manager-team state resolves through the hosted
|
|
@@ -23,6 +23,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
exports.manifestXmlForPort = manifestXmlForPort;
|
|
26
|
+
exports.shouldSkipSideloadForFlag = shouldSkipSideloadForFlag;
|
|
26
27
|
exports.winDeveloperManifestSubkey = winDeveloperManifestSubkey;
|
|
27
28
|
exports.isSideloaded = isSideloaded;
|
|
28
29
|
exports.sideloadManifest = sideloadManifest;
|
|
@@ -62,7 +63,10 @@ function generatedManifestPath(entry, userDataDir) {
|
|
|
62
63
|
return path_1.default.join(userDataDir, 'office-manifests', entry.guid, 'manifest.xml');
|
|
63
64
|
}
|
|
64
65
|
function manifestXmlForPort(xml, httpPort) {
|
|
65
|
-
return xml.replace(/https?:\/\/(?:localhost|127\.0\.0\.1):43091/g, `http://127.0.0.1:${httpPort}`);
|
|
66
|
+
return xml.replace(/https?:\/\/(?:localhost|127\.0\.0\.1):(43091|43092)/g, `http://127.0.0.1:${httpPort}`);
|
|
67
|
+
}
|
|
68
|
+
function shouldSkipSideloadForFlag(existingFlag, expectedFlag, sideloaded) {
|
|
69
|
+
return existingFlag?.trim() === expectedFlag && sideloaded;
|
|
66
70
|
}
|
|
67
71
|
function prepareManifestForSideload(entry, sourcePath, options) {
|
|
68
72
|
if (!options.httpPort)
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
<DefaultLocale>en-US</DefaultLocale>
|
|
10
10
|
<DisplayName DefaultValue="FRAIM"/>
|
|
11
11
|
<Description DefaultValue="AI Hub for your document - legal, product, engineering, and more in one task pane."/>
|
|
12
|
-
<IconUrl DefaultValue="
|
|
13
|
-
<HighResolutionIconUrl DefaultValue="
|
|
12
|
+
<IconUrl DefaultValue="https://localhost:43092/word-taskpane/icon-64.png"/>
|
|
13
|
+
<HighResolutionIconUrl DefaultValue="https://localhost:43092/word-taskpane/icon-64.png"/>
|
|
14
14
|
<AppDomains>
|
|
15
15
|
<AppDomain>https://appsforoffice.microsoft.com</AppDomain>
|
|
16
16
|
</AppDomains>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</Requirements>
|
|
27
27
|
|
|
28
28
|
<DefaultSettings>
|
|
29
|
-
<SourceLocation DefaultValue="
|
|
29
|
+
<SourceLocation DefaultValue="https://localhost:43092/word-taskpane/"/>
|
|
30
30
|
</DefaultSettings>
|
|
31
31
|
|
|
32
32
|
<Permissions>ReadWriteDocument</Permissions>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fraim-hub",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.251",
|
|
4
4
|
"description": "FRAIM Hub local companion package.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"fraim-hub": "bin/fraim-hub.js",
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
"electron": "^41.2.2",
|
|
164
164
|
"electron-updater": "^6.8.9",
|
|
165
165
|
"express": "^5.2.1",
|
|
166
|
-
"fraim": "2.0.
|
|
166
|
+
"fraim": "2.0.251",
|
|
167
167
|
"mongodb": "^7.0.0",
|
|
168
168
|
"node-cron": "4.2.1",
|
|
169
169
|
"node-edge-tts": "^1.2.10",
|