@metacall/protocol
Version:
Tool for deploying into MetaCall FaaS platform.
156 lines (152 loc) • 6.06 kB
JavaScript
;
/*
* About File:
this is just a client that implements all the rest API from the FaaS, so each function it contains is an endpoint in the FaaS for deploying and similar
refresh: updates the auth token
validate: validates the auth token
deployEnabled: checks if you're able to deploy
listSubscriptions: gives you a list of the subscription available
listSubscriptionsDeploys: gives you a list of the subscription being used in deploys
inspect: gives you are deploys with it's endpoints
upload: uploads a zip (package) into the faas
deploy: deploys the previously uploaded zip into the faas
deployDelete: deletes the deploy and the zip
logs: retrieve the logs of a deploy by runner or deployment
branchList: get the branches of a repository
fileList: get files of a repository by branch
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ResourceType = exports.isProtocolError = void 0;
const axios_1 = __importDefault(require("axios"));
const form_data_1 = __importDefault(require("form-data"));
const deployment_1 = require("./deployment");
const isProtocolError = (err) => axios_1.default.isAxiosError(err);
exports.isProtocolError = isProtocolError;
var ResourceType;
(function (ResourceType) {
ResourceType["Package"] = "Package";
ResourceType["Repository"] = "Repository";
})(ResourceType = exports.ResourceType || (exports.ResourceType = {}));
exports.default = (token, baseURL) => {
const api = {
refresh: () => axios_1.default
.get(baseURL + '/api/account/refresh-token', {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data),
validate: () => axios_1.default
.get(baseURL + '/validate', {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data),
deployEnabled: () => axios_1.default
.get(baseURL + '/api/account/deploy-enabled', {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data),
listSubscriptions: async () => {
const res = await axios_1.default.get(baseURL + '/api/billing/list-subscriptions', {
headers: { Authorization: 'jwt ' + token }
});
const subscriptions = {};
for (const id of res.data) {
if (subscriptions[id] === undefined) {
subscriptions[id] = 1;
}
else {
++subscriptions[id];
}
}
return subscriptions;
},
listSubscriptionsDeploys: async () => axios_1.default
.get(baseURL + '/api/billing/list-subscriptions-deploys', {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data),
inspect: async () => axios_1.default
.get(baseURL + '/api/inspect', {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data),
upload: async (name, blob, jsons = [], runners = []) => {
var _a, _b;
const fd = new form_data_1.default();
fd.append('id', name);
fd.append('type', 'application/x-zip-compressed');
fd.append('jsons', JSON.stringify(jsons));
fd.append('runners', JSON.stringify(runners));
fd.append('raw', blob, {
filename: 'blob',
contentType: 'application/x-zip-compressed'
});
const res = await axios_1.default.post(baseURL + '/api/package/create', fd, {
headers: {
Authorization: 'jwt ' + token,
...((_b = (_a = fd.getHeaders) === null || _a === void 0 ? void 0 : _a.call(fd)) !== null && _b !== void 0 ? _b : {}) // operator chaining to make it compatible with frontend
}
});
return res.data;
},
add: (url, branch, jsons = []) => axios_1.default
.post(baseURL + '/api/repository/add', {
url,
branch,
jsons
}, {
headers: { Authorization: 'jwt ' + token }
})
.then((res) => res.data),
branchList: (url) => axios_1.default
.post(baseURL + '/api/repository/branchlist', {
url
}, {
headers: { Authorization: 'jwt ' + token }
})
.then((res) => res.data),
deploy: (name, env, plan, resourceType, release = Date.now().toString(16), version = 'v1') => axios_1.default
.post(baseURL + '/api/deploy/create', {
resourceType,
suffix: name,
release,
env,
plan,
version
}, {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data),
deployDelete: (prefix, suffix, version = 'v1') => axios_1.default
.post(baseURL + '/api/deploy/delete', {
prefix,
suffix,
version
}, {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data),
logs: (container, type = deployment_1.LogType.Deploy, suffix, prefix, version = 'v1') => axios_1.default
.post(baseURL + '/api/deploy/logs', {
container,
type,
suffix,
prefix,
version
}, {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data),
fileList: (url, branch) => axios_1.default
.post(baseURL + '/api/repository/filelist', {
url,
branch
}, {
headers: { Authorization: 'jwt ' + token }
})
.then(res => res.data['files'])
};
return api;
};