UNPKG

@metacall/protocol

Version:

Tool for deploying into MetaCall FaaS platform.

156 lines (152 loc) 6.06 kB
"use strict"; /* * 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; };