yandex-cloud
Version:
Yandex Cloud SDK
200 lines (192 loc) • 4.71 kB
JavaScript
const defaultEndpoints = [
{
id: 'operation',
address: 'operation.api.cloud.yandex.net:443',
},
{
id: 'compute',
address: 'compute.api.cloud.yandex.net:443',
},
{
id: 'iam',
address: 'iam.api.cloud.yandex.net:443',
},
{
id: 'resourcemanager',
address: 'resource-manager.api.cloud.yandex.net:443',
},
{
id: 'resource-manager',
address: 'resource-manager.api.cloud.yandex.net:443',
},
{
id: 'mdb-clickhouse',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'managed-clickhouse',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'mdb-mongodb',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'managed-mongodb',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'mdb-postgresql',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'managed-postgresql',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'mdb-redis',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'managed-redis',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'mdb-mysql',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'managed-mysql',
address: 'mdb.api.cloud.yandex.net:443',
},
{
id: 'dataproc',
address: 'dataproc.api.cloud.yandex.net:443',
},
{
id: 'vpc',
address: 'vpc.api.cloud.yandex.net:443',
},
{
id: 'container-registry',
address: 'container-registry.api.cloud.yandex.net:443',
},
{
id: 'load-balancer',
address: 'load-balancer.api.cloud.yandex.net:443',
},
{
id: 'serverless-functions',
address: 'serverless-functions.api.cloud.yandex.net:443',
},
{
id: 'serverless-triggers',
address: 'serverless-triggers.api.cloud.yandex.net:443',
},
{
id: 'k8s',
address: 'mks.api.cloud.yandex.net:443',
},
{
id: 'managed-kubernetes',
address: 'mks.api.cloud.yandex.net:443',
},
{
id: 'logs',
address: 'logs.api.cloud.yandex.net:443',
},
{
id: 'ydb',
address: 'ydb.api.cloud.yandex.net:443',
},
{
id: 'iot-devices',
address: 'iot-devices.api.cloud.yandex.net:443',
},
{
id: 'iot-data',
address: 'iot-data.api.cloud.yandex.net:443',
},
{
id: 'dataproc-manager',
address: 'dataproc-manager.api.cloud.yandex.net:443',
},
{
id: 'kms',
address: 'kms.api.cloud.yandex.net:443',
},
{
id: 'kms-crypt',
address: 'kms.yandex:443',
},
{
id: 'endpoint',
address: 'api.cloud.yandex.net:443',
},
{
id: 'storage',
address: 'storage.yandexcloud.net:443',
},
{
id: 'serialssh',
address: 'serialssh.cloud.yandex.net:9600',
},
{
id: 'ai-translate',
address: 'translate.api.cloud.yandex.net:443',
},
{
id: 'ai-vision',
address: 'vision.api.cloud.yandex.net:443',
},
{
id: 'locator',
address: 'locator.api.cloud.yandex.net:443',
},
{
id: 'ai-stt',
address: 'transcribe.api.cloud.yandex.net:443',
},
{
id: 'ai-speechkit',
address: 'transcribe.api.cloud.yandex.net:443',
},
{
id: 'docapi',
address: 'docapi.serverless.yandexcloud.net:443',
},
];
const grpc = require('grpc');
const util = require('./util');
const grpcEndpoint = require('../api/endpoint');
function zipEndpoints(ep) {
let result = {};
for (let e of ep) {
result[e.id] = e.address;
}
return result;
}
class EndpointResolver {
constructor() {
this.__endpoints = zipEndpoints(defaultEndpoints);
}
async updateEndpointList(cloudApiEndpoint) {
const ctor = grpcEndpoint.ApiEndpointService.makeGrpcConstructor();
let epService = new ctor(
cloudApiEndpoint,
grpc.credentials.createSsl()
);
epService = util.pimpServiceInstance(epService);
const result = await epService.list({});
for (let ep of result.endpoints) {
this.__endpoints[ep.id] = ep.address;
}
}
resolve(endpointId) {
if (!this.__endpoints.hasOwnProperty(endpointId)) {
throw new Error(`unknown endpoint '${endpointId}'`);
}
return this.__endpoints[endpointId];
}
}
module.exports = { EndpointResolver };