@sap-ux/store
Version:
NPM module for storing persistent data
110 lines • 4.9 kB
JavaScript
;
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