mirror of
https://github.com/hansjone/dsh-im-ops.git
synced 2026-10-09 05:20:46 +08:00
45 lines
2 KiB
JavaScript
45 lines
2 KiB
JavaScript
import { homedir } from 'node:os';
|
|
import { join, resolve } from 'node:path';
|
|
|
|
import { OfficeConfigStore } from '../../../../src/channels/office/config-store.mjs';
|
|
import { OfficeController } from '../../../../src/channels/office/office-controller.mjs';
|
|
import { OfficeRuntime } from '../../../../src/channels/office/office-runtime.mjs';
|
|
import { HarnessClient } from '../../../../src/channels/shared/harness-client.mjs';
|
|
import { harnessConnection } from '../../harness-connection.mjs';
|
|
|
|
export function officePaths(config = {}) {
|
|
const dshHome = resolve(config.dshHome ?? process.env.DSH_HOME ?? join(homedir(), '.dsh'));
|
|
const root = resolve(config.dataDir ?? join(dshHome, 'integrations', 'dsh-office'));
|
|
return { root, config: resolve(config.configPath ?? join(root, 'config.json')) };
|
|
}
|
|
|
|
export async function createProductionController(ctx, config = {}, internals = {}) {
|
|
const connection = harnessConnection(ctx, config);
|
|
const Store = internals.ConfigStore ?? OfficeConfigStore;
|
|
const Controller = internals.Controller ?? OfficeController;
|
|
const Runtime = internals.Runtime ?? OfficeRuntime;
|
|
const ResolvedHarness = internals.HarnessClient ?? HarnessClient;
|
|
const paths = officePaths(config);
|
|
const configStore = await new Store(paths.config).load();
|
|
const logger = typeof ctx.logger === 'function' ? ctx.logger('dsh-im:office') : (ctx.logger ?? console);
|
|
const createHarness = internals.createHarness ?? (({ workspace }) => new ResolvedHarness({
|
|
...connection,
|
|
workspace,
|
|
autostart: false,
|
|
dshBin: config.dshBin ?? 'dsh',
|
|
rpcIdPrefix: 'office',
|
|
logPrefix: 'dsh-im:office',
|
|
}));
|
|
const controller = new Controller({
|
|
credentials: ctx.credentials,
|
|
configStore,
|
|
logger,
|
|
createRuntime: (options) => new Runtime({
|
|
...options,
|
|
createHarness,
|
|
...(internals.transport ? { transport: internals.transport } : {}),
|
|
}),
|
|
});
|
|
await controller.initialize();
|
|
return { controller, close: () => controller.close(), paths };
|
|
}
|