libmodulor
Version:
A TypeScript library to create platform-agnostic applications
68 lines (67 loc) • 3.2 kB
JavaScript
import { Container } from 'inversify';
import { TApiKey, TPassword, TUsername, } from '../../dt/index.js';
import { STD_DEFAULT_JWT_MANAGER_SETTINGS, } from '../../std/index.js';
import { TARGET_DEFAULT_SERVER_MANAGER_SETTINGS } from '../../target/lib/server/consts.js';
import { NodeExpressServerManager } from '../../target/node-express-server/NodeExpressServerManager.js';
import { FAKE_USER_ADMIN, FAKE_USER_REGULAR } from '../../uc/index.js';
import { CONTAINER_OPTS } from '../../utils/index.js';
import { bindCommon } from '../../utils/ioc/bindCommon.js';
import { bindNodeCore } from '../../utils/ioc/bindNodeCore.js';
import { bindServer } from '../../utils/ioc/bindServer.js';
import { AppTester } from '../AppTester.js';
import { optsAllSet } from '../opts.js';
import { SimpleAppDocsEmitter } from './SimpleAppDocsEmitter.js';
import { TypeScriptLibUCDefASTParser } from './TypeScriptLibUCDefASTParser.js';
export async function newNodeAppTester(serverPortRangeStart, idx, args) {
const { configurator } = args;
const { logger_level } = optsAllSet(await configurator.opts());
const settings = {
...STD_DEFAULT_JWT_MANAGER_SETTINGS,
...TARGET_DEFAULT_SERVER_MANAGER_SETTINGS,
jwt_manager_audience: 'fik',
jwt_manager_issuer: 'fik',
jwt_manager_secret: new TPassword().example(),
logger_level,
server_basic_auth_entries: {
[new TUsername().example()]: new TPassword().example(),
},
server_binding_port: serverPortRangeStart + idx,
server_private_api_key_entries: [new TApiKey().example()],
server_public_api_key_entries: [new TApiKey().example()],
};
const container = new Container(CONTAINER_OPTS);
bindCommon(container, () => settings);
bindNodeCore(container);
bindServer(container);
container.bind('AppDocsEmitter').to(SimpleAppDocsEmitter);
container
.bind('ServerManager')
.to(NodeExpressServerManager)
.inSingletonScope();
container
.bind('UCDefASTParser')
.to(TypeScriptLibUCDefASTParser);
const tester = container.get(AppTester);
const jwtManager = container.get('JWTManager');
const apiKey = settings.server_private_api_key_entries[0];
const [basicAuth] = Object.entries(settings.server_basic_auth_entries);
const basic = basicAuth
? { password: basicAuth[1], username: basicAuth[0] }
: undefined;
await tester.init({
...args,
serverClientSettings: {
server_cookies_name_auth: settings.server_cookies_name_auth,
server_dangerously_set_api_key: apiKey,
server_dangerously_set_basic: basic,
server_dangerously_set_jwts: {
admin: await jwtManager.encode(FAKE_USER_ADMIN),
regular: await jwtManager.encode(FAKE_USER_REGULAR),
},
server_public_api_key: settings.server_public_api_key_entries[0] || null,
server_public_api_key_header_name: settings.server_public_api_key_header_name,
server_public_url: `http://${settings.server_binding_host}:${settings.server_binding_port}`,
},
});
return tester;
}