chamesu
Version:
This package contains all packages of the chat application.
67 lines (53 loc) • 1.85 kB
text/typescript
/*
* Copyright (c) 2021-2021.
* Author Peter Placzek (tada5hi)
* For the full copyright and license information,
* view the LICENSE file that was distributed with this source code.
*/
import { Client, Config } from '@trapi/client';
import { APIConnectionStringError } from '../../error';
import {
APIServiceVaultConfig,
} from './type';
import { VaultMountAPI } from './mount';
import { VaultKeyValueAPI } from './key-value';
export function parseVaultConnectionString(connectionString: string) : APIServiceVaultConfig {
const parts : string[] = connectionString.split('@');
if (parts.length !== 2) {
throw new APIConnectionStringError('Vault connection string must be in the following format: token@host');
}
return {
host: parts[1],
token: parts[0],
};
}
export class VaultAPI extends Client {
public readonly mount : VaultMountAPI;
public readonly keyValue: VaultKeyValueAPI;
constructor(config: Config) {
const vaultConfig: APIServiceVaultConfig = parseVaultConnectionString(config.extra.connectionString);
config.driver = {
...(config.driver ?? {}),
withCredentials: true,
timeout: 3000,
baseURL: vaultConfig.host,
headers: {
'X-Vault-Request': 'true',
'Content-Type': 'application/json',
},
};
super(config);
this.setHeader('X-Vault-Token', vaultConfig.token);
this.mount = new VaultMountAPI(this.driver);
this.keyValue = new VaultKeyValueAPI({
client: this.driver,
mountAPI: this.mount,
});
}
setNamespace(namespace: string) {
this.setHeader('X-Vault-Namespace', namespace);
}
unsetNamespace() {
this.unsetHeader('X-Vault-Namespace');
}
}