43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
// Copyright 2022 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import type { connection as WebSocket } from 'websocket';
|
|
|
|
import * as Bytes from '../../Bytes';
|
|
import { CDSISocket } from './CDSISocket';
|
|
import type { CDSSocketManagerBaseOptionsType } from './CDSSocketManagerBase';
|
|
import { CDSSocketManagerBase } from './CDSSocketManagerBase';
|
|
|
|
export type CDSIOptionsType = Readonly<{
|
|
mrenclave: string;
|
|
root: string;
|
|
}> &
|
|
CDSSocketManagerBaseOptionsType;
|
|
|
|
export class CDSI extends CDSSocketManagerBase<CDSISocket, CDSIOptionsType> {
|
|
private readonly mrenclave: Buffer;
|
|
|
|
private readonly trustedCaCert: Buffer;
|
|
|
|
constructor(options: CDSIOptionsType) {
|
|
super(options);
|
|
|
|
this.mrenclave = Buffer.from(Bytes.fromHex(options.mrenclave));
|
|
this.trustedCaCert = Buffer.from(options.root);
|
|
}
|
|
|
|
protected override getSocketUrl(): string {
|
|
const { mrenclave } = this.options;
|
|
|
|
return `${this.options.url}/v1/${mrenclave}/discovery`;
|
|
}
|
|
|
|
protected override createSocket(socket: WebSocket): CDSISocket {
|
|
return new CDSISocket({
|
|
logger: this.logger,
|
|
socket,
|
|
mrenclave: this.mrenclave,
|
|
trustedCaCert: this.trustedCaCert,
|
|
});
|
|
}
|
|
}
|