esa-cli
Version:
A CLI for operating Alibaba Cloud ESA Functions and Pages.
1,105 lines (1,104 loc) • 41 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import * as $OpenApi from '@alicloud/openapi-client';
import FormData from 'form-data';
import fetch from 'node-fetch';
import t from '../i18n/index.js';
import { getApiConfig } from '../utils/fileUtils/index.js';
import { Environment } from './interface.js';
import { CLI_USER_AGENT } from './constants.js';
export class ApiService {
constructor(cliConfig) {
var _a, _b;
let apiConfig = new $OpenApi.Config({
accessKeyId: (_a = cliConfig.auth) === null || _a === void 0 ? void 0 : _a.accessKeyId,
accessKeySecret: (_b = cliConfig.auth) === null || _b === void 0 ? void 0 : _b.accessKeySecret,
endpoint: cliConfig.endpoint,
userAgent: CLI_USER_AGENT
});
this.client = new $OpenApi.default.default(apiConfig);
}
static getInstance() {
return __awaiter(this, void 0, void 0, function* () {
if (!ApiService.instance) {
const config = getApiConfig();
ApiService.instance = new ApiService(config);
}
return ApiService.instance;
});
}
updateConfig(newConfig) {
var _a, _b;
let apiConfig = new $OpenApi.Config({
accessKeyId: (_a = newConfig.auth) === null || _a === void 0 ? void 0 : _a.accessKeyId,
accessKeySecret: (_b = newConfig.auth) === null || _b === void 0 ? void 0 : _b.accessKeySecret,
endpoint: newConfig.endpoint,
userAgent: CLI_USER_AGENT
});
this.client = new $OpenApi.default.default(apiConfig);
}
/**
* Checks if the user is logged in.
* @returns A promise that resolves to an object with the following properties:
* - success: A boolean indicating if the login check was successful.
* - message: (Optional) A string providing additional information in case of failure.
*/
checkLogin() {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'GetErService',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {}
});
let runtime = {
toMap: function () {
return this;
}
};
const response = yield this.client.callApi(params, request, runtime);
if (response.statusCode === 200) {
if (response.body.Status === 'Running') {
return { success: true };
}
else {
return {
success: false,
message: t('not_active').d('Functions and Pages is not active, please activate it first. Visit: https://esa.console.aliyun.com/edge/pages to activate.')
};
}
}
else if (response.statusCode === 403) {
return {
success: false,
message: t('login_permission_denied').d('Permission denied: Access key or secret is incorrect, or does not have the necessary permissions.')
};
}
else {
return {
success: false,
message: `${t('common_error_occurred').d('An error occurred')}: ${response.statusCode}`
};
}
}
catch (error) {
return {
success: false,
message: t('login_failed').d('An error occurred while trying to log in.')
};
}
});
}
quickDeployRoutine(edgeRoutine) {
return __awaiter(this, void 0, void 0, function* () {
try {
// Upload code to unstable version
const stagingRes = yield this.getRoutineStagingCodeUploadInfo(edgeRoutine);
if (stagingRes) {
// Production version
const commitRes = yield this.commitRoutineStagingCode({
Name: edgeRoutine.name,
CodeDescription: edgeRoutine.description
});
// Deploy to production environment
if (commitRes) {
const deployRes = yield this.publishRoutineCodeVersion({
Name: edgeRoutine.name,
CodeVersion: commitRes.data.CodeVersion,
Env: Environment.Production
});
return deployRes && Number(deployRes.code) === 200;
}
}
return false;
}
catch (error) {
console.log(error);
}
return false;
});
}
publishRoutineCodeVersion(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'PublishRoutineCodeVersion',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Env: requestParams.Env,
Name: requestParams.Name,
CodeVersion: requestParams.CodeVersion
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
CodeVersion: res.body.CodeVersion,
RequestId: res.body.RequestId
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
getMatchSite(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'GetMatchSite',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
RecordName: requestParams.RecordName
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
SiteId: res.body.SiteId,
SiteName: res.body.SiteName
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
listUserRoutines(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'ListUserRoutines',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: requestParams || {}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
return res;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
deleteRoutine(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'DeleteRoutine',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: requestParams.Name
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
Status: res.body.Status
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
deleteRoutineCodeVersion(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'DeleteRoutineCodeVersion',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: requestParams.Name,
CodeVersion: requestParams.CodeVersion
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
Status: res.body.Status
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
createRoutineRelatedRoute(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'CreateRoutineRelatedRoute',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Route: requestParams.Route,
SiteId: requestParams.SiteId,
SiteName: requestParams.SiteName,
Name: requestParams.Name
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
RequestId: res.body.RequestId,
Status: res.body.Status
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
deleteRoutineRelatedRoute(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'DeleteRoutineRelatedRoute',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Route: requestParams.Route,
RouteId: requestParams.RouteId,
SiteId: requestParams.SiteId,
SiteName: requestParams.SiteName,
Name: requestParams.Name
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
RequestId: res.body.RequestId,
Status: res.body.Status
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
listSites(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'ListSites',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: requestParams
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200) {
const response = {
code: res.statusCode,
data: {
TotalCount: res.body.TotalCount,
RequestId: res.body.RequestId,
PageSize: res.body.PageSize,
PageNumber: res.body.PageNumber,
Sites: res.body.Sites
}
};
return response;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
getRoutineStagingEnvIp() {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'GetRoutineStagingEnvIp',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200) {
const response = {
code: res.statusCode,
data: {
IPV4: res.body.IPV4,
RequestId: res.body.RequestId
}
};
return response;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
getRoutine(requestParams_1) {
return __awaiter(this, arguments, void 0, function* (requestParams, isShowError = true) {
try {
let params = {
action: 'GetRoutine',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: requestParams.Name
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const routineResponse = {
code: res.statusCode,
data: res.body
};
return routineResponse;
}
}
catch (error) {
if (isShowError) {
console.log(error);
}
}
return null;
});
}
createRoutine(edgeRoutine) {
return __awaiter(this, void 0, void 0, function* () {
let params = {
action: 'CreateRoutine',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: edgeRoutine.name,
Description: edgeRoutine.description,
HasAssets: edgeRoutine.hasAssets
}
});
let runtime = {
toMap: function () {
return this;
}
};
try {
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
RequestId: res.body.RequestId,
Status: res.body.Status
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
getRoutineStagingCodeUploadInfo(edgeRoutine) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'GetRoutineStagingCodeUploadInfo',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: edgeRoutine.name
}
});
let runtime = {
toMap: function () {
return this;
}
};
const uploadResult = yield this.client.callApi(params, request, runtime);
const ossConfig = uploadResult.body.OssPostConfig;
if (uploadResult.statusCode !== 200 || !ossConfig) {
return false;
}
const { OSSAccessKeyId, Signature, callback, Url, key, policy } = ossConfig;
const formData = new FormData();
formData.append('OSSAccessKeyId', OSSAccessKeyId);
formData.append('Signature', Signature);
formData.append('callback', callback);
formData.append('x:codeDescription', ossConfig['x:codeDescription']);
formData.append('policy', policy);
formData.append('key', key);
formData.append('file', edgeRoutine.code);
const ossRes = yield fetch(Url, {
method: 'POST',
body: formData,
headers: formData.getHeaders()
});
if (ossRes && ossRes.status === 200) {
return true;
}
return false;
}
catch (error) {
console.log(error);
return false;
}
});
}
commitRoutineStagingCode(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'CommitRoutineStagingCode',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: requestParams.Name,
CodeDescription: requestParams.CodeDescription
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
RequestId: res.body.RequestId,
CodeVersion: res.body.CodeVersion
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
createRoutineRelatedRecord(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'CreateRoutineRelatedRecord',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
RecordName: requestParams.RecordName,
SiteId: requestParams.SiteId,
SiteName: requestParams.SiteName,
Name: requestParams.Name
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
Status: res.body.Status,
RequestId: res.body.RequestId
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
deleteRoutineRelatedRecord(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'DeleteRoutineRelatedRecord',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
RecordName: requestParams.RecordName,
SiteId: requestParams.SiteId,
SiteName: requestParams.SiteName,
Name: requestParams.Name,
RecordId: requestParams.RecordId
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
Status: res.body.Status,
RequestId: res.body.RequestId
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
listRoutineRelatedRecords(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'ListRoutineRelatedRecords',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: requestParams.Name,
PageNumber: requestParams.PageNumber,
PageSize: requestParams.PageSize,
SearchKeyWord: requestParams.SearchKeyWord
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
PageNumber: res.body.PageNumber,
PageSize: res.body.PageSize,
TotalCount: res.body.TotalCount,
RelatedRecords: res.body.RelatedRecords
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
createRoutineRoute(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'CreateRoutineRoute',
version: '2024-09-10',
protocol: 'https',
method: 'POST',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
SiteId: requestParams.SiteId,
RoutineName: requestParams.RoutineName,
RouteName: requestParams.RouteName,
RouteEnable: 'on',
Rule: requestParams.Rule,
Bypass: requestParams.Bypass,
Mode: 'simple'
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
RequestId: res.body.RequestId,
ConfigId: res.body.ConfigId
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
/**
* 调用 CreateRoutineWithAssetsCodeVersion API 获取 OSS 上传配置
*/
CreateRoutineWithAssetsCodeVersion(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
try {
let params = {
action: 'CreateRoutineWithAssetsCodeVersion',
version: '2024-09-10',
protocol: 'https',
method: 'POST',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
body: {
Name: requestParams.Name,
CodeDescription: requestParams.CodeDescription,
ExtraInfo: requestParams.ExtraInfo,
ConfOptions: {
NotFoundStrategy: (_a = requestParams.ConfOptions) === null || _a === void 0 ? void 0 : _a.NotFoundStrategy
}
}
});
let runtime = {
toMap: function () {
return this;
}
};
const result = yield this.client.callApi(params, request, runtime);
if (result.statusCode === 200 && result.body) {
return {
code: result.statusCode.toString(),
data: {
RequestId: result.body.RequestId,
CodeVersion: result.body.CodeVersion,
Status: result.body.Status,
OssPostConfig: result.body.OssPostConfig
}
};
}
return null;
}
catch (error) {
console.error('Error calling CreateRoutineWithAssetsCodeVersion:', error);
return null;
}
});
}
/**
* 上传文件到 OSS
*/
uploadToOss(ossConfig, zipBuffer) {
return __awaiter(this, void 0, void 0, function* () {
try {
const { OSSAccessKeyId, Signature, Url, Key, Policy, XOssSecurityToken } = ossConfig;
const formData = new FormData();
formData.append('OSSAccessKeyId', OSSAccessKeyId);
formData.append('Signature', Signature);
formData.append('x-oss-security-token', XOssSecurityToken);
formData.append('policy', Policy);
formData.append('key', Key);
formData.append('file', zipBuffer);
const ossRes = yield fetch(Url, {
method: 'POST',
body: formData,
headers: formData.getHeaders()
});
return ossRes && (ossRes.status === 200 || ossRes.status === 204);
}
catch (error) {
console.error('Error uploading to OSS:', error);
return false;
}
});
}
createRoutineCodeDeployment(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'CreateRoutineCodeDeployment',
version: '2024-09-10',
protocol: 'https',
method: 'POST',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: requestParams.Name,
Env: requestParams.Env,
Strategy: requestParams.Strategy,
CodeVersions: JSON.stringify(requestParams.CodeVersions)
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: {
RequestId: res.body.RequestId,
Strategy: res.body.Strategy,
DeploymentId: res.body.DeploymentId,
CodeVersions: res.body.CodeVersions
}
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
getRoutineCodeVersionInfo(requestParams) {
return __awaiter(this, void 0, void 0, function* () {
try {
let params = {
action: 'GetRoutineCodeVersionInfo',
version: '2024-09-10',
protocol: 'https',
method: 'GET',
authType: 'AK',
bodyType: 'json',
reqBodyType: 'json',
style: 'RPC',
pathname: '/',
toMap: function () {
return this;
}
};
let request = new $OpenApi.OpenApiRequest({
query: {
Name: requestParams.Name,
CodeVersion: requestParams.CodeVersion
}
});
let runtime = {
toMap: function () {
return this;
}
};
const res = yield this.client.callApi(params, request, runtime);
if (res.statusCode === 200 && res.body) {
const ret = {
code: res.statusCode,
data: res.body
};
return ret;
}
}
catch (error) {
console.log(error);
}
return null;
});
}
}
ApiService.instance = null;