UNPKG

jamsocket

Version:

A CLI for the Jamsocket platform

118 lines (117 loc) 4.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JamsocketConfig = exports.JAMSOCKET_CONFIG_DIR = void 0; exports.isUserSessionConfig = isUserSessionConfig; exports.isApiTokenConfig = isApiTokenConfig; exports.deleteJamsocketConfig = deleteJamsocketConfig; const os_1 = require("os"); const path_1 = require("path"); const fs_1 = require("fs"); exports.JAMSOCKET_CONFIG_DIR = (0, path_1.resolve)((0, os_1.homedir)(), '.jamsocket'); const JAMSOCKET_CONFIG_PATH = (0, path_1.resolve)(exports.JAMSOCKET_CONFIG_DIR, 'config.json'); // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function isUserSessionConfig(config) { return (config !== undefined && config.user_session !== undefined && config.user_session.uuid !== undefined && config.user_session.token !== undefined && config.user_session.user_id !== undefined && config.user_session.selected_account !== undefined); } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function isApiTokenConfig(config) { return (config !== undefined && config.api_token !== undefined && config.api_token.token !== undefined && config.api_token.account !== undefined); } function deleteJamsocketConfig() { if (!(0, fs_1.existsSync)(JAMSOCKET_CONFIG_PATH)) return; (0, fs_1.unlinkSync)(JAMSOCKET_CONFIG_PATH); } class JamsocketConfig { static fromSaved() { if (!(0, fs_1.existsSync)(JAMSOCKET_CONFIG_PATH)) return null; const contents = (0, fs_1.readFileSync)(JAMSOCKET_CONFIG_PATH, 'utf-8'); let config; try { config = JSON.parse(contents); } catch { deleteJamsocketConfig(); return null; } const isInvalidConfig = isApiTokenConfig(config) === isUserSessionConfig(config); if (isInvalidConfig) { deleteJamsocketConfig(); return null; } return new JamsocketConfig(config); } constructor(config) { this.config = config; } loggedInType() { if (isUserSessionConfig(this.config)) return 'user_session'; return 'api_token'; } updateSelectedAccount(selectedAccount) { if (isUserSessionConfig(this.config)) { this.config.user_session.selected_account = selectedAccount; } else { throw new Error('Cannot update selected account for API token config. This is a bug with the Jamsocket CLI.'); } } save() { const dir = (0, path_1.dirname)(JAMSOCKET_CONFIG_PATH); (0, fs_1.mkdirSync)(dir, { recursive: true }); (0, fs_1.writeFileSync)(JAMSOCKET_CONFIG_PATH, `${JSON.stringify(this.config, null, 2)}${os_1.EOL}`); } getSessionUuid() { if (isUserSessionConfig(this.config)) return this.config.user_session.uuid; return null; } // returns a token that can access our API endpoints (either a user session token or api token) getAccessToken() { if (isApiTokenConfig(this.config)) return this.config.api_token.token; return this.config.user_session.token; } getAuthHeaders() { const headers = { Authorization: `Bearer ${this.getAccessToken()}`, }; if (this.isAdmin()) { headers['X-Jamsocket-Admin-As-Account'] = this.getAccount(); } return headers; } getAccount() { if (isApiTokenConfig(this.config)) return this.config.api_token.account; return this.config.user_session.selected_account; } getUserEmail() { if (isUserSessionConfig(this.config)) return this.config.user_session.user_email ?? null; return null; } isAdmin() { if (isUserSessionConfig(this.config)) return this.config.user_session.user_is_admin; return false; } getRegistryAuth() { // this version of the token is used for Basic Authorization, which is required for our Docker registry const account = this.getAccount(); const token = this.getAccessToken(); const buff = Buffer.from(`${account}:${token}`, 'utf-8'); return buff.toString('base64'); } } exports.JamsocketConfig = JamsocketConfig;