// This file contains logic to connect to a servezone cloudly instance // The connection is done using websockets to have an always open channel // that is bidirectional import * as plugins from './coreflow.plugins.js'; import { Coreflow } from './coreflow.classes.coreflow.js'; export class CloudlyConnector { public coreflowRef: Coreflow; public cloudlyApiClient: plugins.servezoneApi.CloudlyApiClient; public coreflowJumpCode: string; public identity: plugins.servezoneInterfaces.data.IIdentity; constructor(coreflowRefArg: Coreflow) { this.coreflowRef = coreflowRefArg; } public async start() { this.cloudlyApiClient = new plugins.servezoneApi.CloudlyApiClient({ registerAs: 'coreflow', cloudlyUrl: await this.coreflowRef.serviceQenv.getEnvVarOnDemand('CLOUDLY_URL') }); await this.cloudlyApiClient.start(); this.coreflowJumpCode = await this.coreflowRef.serviceQenv.getEnvVarOnDemand('JUMPCODE'); // get identity and tag connection (second parameter is true -> tags the connection) this.identity = await this.cloudlyApiClient.getIdentityByToken(this.coreflowJumpCode, { statefullIdentity: true, tagConnection: true, }); } public async stop() { await this.cloudlyApiClient.stop(); } public async getConfigFromCloudly(): Promise { const config = await this.cloudlyApiClient.getClusterConfigFromCloudlyByIdentity( this.identity ); return config; } public async getCertificateForDomainFromCloudly( domainNameArg: string ): Promise { const certificate = await this.cloudlyApiClient.getCertificateForDomain({ identity: this.identity, domainName: domainNameArg, type: 'ssl', }); return certificate; } }