UNPKG

@sap-ux/store

Version:

NPM module for storing persistent data

110 lines 4.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSecureStore = void 0; const utils_1 = require("../utils"); const dummy_store_1 = require("./dummy-store"); const key_store_1 = require("./key-store"); const path_1 = require("path"); const os_1 = require("os"); const fs_1 = __importDefault(require("fs")); /** * Retrieve paths to Zowe SDK from SAP Application Modeler extensions. * * @param insiders - Flag indicating if VS Code Insiders extensions should be checked. * @returns Array of valid paths where Zowe SDK might exist. */ function getZoweSdkPaths(insiders) { const vscodeRootPath = insiders ? '.vscode-insiders' : '.vscode'; const vscodeExtensionsPath = (0, path_1.join)((0, os_1.homedir)(), vscodeRootPath, 'extensions'); if (!fs_1.default.existsSync(vscodeExtensionsPath)) { return []; } const appModelerExtensions = fs_1.default .readdirSync(vscodeExtensionsPath) .filter((dir) => dir.startsWith('sapse.sap-ux-application-modeler-extension')); return appModelerExtensions .map((extensionDir) => { const extensionPath = (0, path_1.join)(vscodeExtensionsPath, extensionDir); const keytarPackageJsonPath = (0, path_1.join)(extensionPath, 'node_modules/@zowe/secrets-for-zowe-sdk/package.json'); return fs_1.default.existsSync(keytarPackageJsonPath) ? (0, path_1.dirname)(keytarPackageJsonPath) : ''; }) .filter((path) => path !== ''); } /** * Load the Zowe secrets SDK, attempting fallbacks if the default import fails. * * @param log - Logger instance for logging. * @returns The Zowe secrets SDK, or undefined if it cannot be loaded. */ function loadZoweSecretSdk(log) { try { // Attempt to load the Zowe SDK directly // eslint-disable-next-line return require('@zowe/secrets-for-zowe-sdk').keyring; } catch (primaryError) { log.warn((0, utils_1.errorString)(primaryError)); log.info('Attempting to load Zowe secrets SDK from fallback locations.'); try { const fallbackPaths = [...getZoweSdkPaths(false), ...getZoweSdkPaths(true)]; log.info(`Discovered fallback directories: ${JSON.stringify(fallbackPaths)}`); for (const path of fallbackPaths) { try { log.info(`Attempting to load Zowe secrets SDK from: ${path}`); return typeof __non_webpack_require__ === 'function' ? __non_webpack_require__(path) : require(path); } catch (fallbackError) { log.warn(`Failed to load Zowe secrets SDK from ${path}: ${(0, utils_1.errorString)(fallbackError)}`); } } } catch (fallbackDiscoveryError) { log.warn(`Error while discovering fallback paths: ${(0, utils_1.errorString)(fallbackDiscoveryError)}`); } log.warn('Unable to load Zowe secrets SDK from any location.'); return undefined; } } /** * Provides an instance of a secure store. * * @param log - Logger instance for logging. * @returns An instance of SecureStore (KeyStoreManager or DummyStore). */ const getSecureStore = (log) => { // Use a DummyStore in environments where secure storage is disabled if ((0, utils_1.isAppStudio)() || process.env.FIORI_TOOLS_DISABLE_SECURE_STORE) { log.debug('Secure store disabled, using DummyStore.'); return new dummy_store_1.DummyStore(log); } // Try to initialize secure storage with Zowe secrets SDK const zoweSecretSdk = loadZoweSecretSdk(log); if (zoweSecretSdk) { log.info('Using KeyStoreManager for secure storage.'); return new key_store_1.KeyStoreManager(log, zoweSecretSdk); } log.debug('Falling back to DummyStore as secure storage could not be initialized.'); return new dummy_store_1.DummyStore(log); }; exports.getSecureStore = getSecureStore; __exportStar(require("./types"), exports); //# sourceMappingURL=index.js.map