{"version":3,"sources":["jsdelivr-header.js","/npm/node-vault@0.11.1/src/index.js"],"names":[],"mappings":"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","file":"/npm/node-vault@0.11.1/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/node-vault@0.11.1/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nconst originalDebug = require('debug')('node-vault');\nconst originalTv4 = require('tv4');\nconst originalCommands = require('./commands.js');\nconst originalMustache = require('mustache');\nconst axios = require('axios');\nconst https = require('https');\n\nclass VaultError extends Error {}\n\nclass ApiResponseError extends VaultError {\n    constructor(message, response) {\n        super(message);\n        this.response = {\n            statusCode: response.statusCode,\n            body: response.body,\n        };\n    }\n}\n\nmodule.exports = (config = {}) => {\n    // load conditional dependencies\n    const debug = config.debug || originalDebug;\n    const tv4 = config.tv4 || originalTv4;\n    const commands = config.commands || originalCommands;\n    const mustache = config.mustache || originalMustache;\n\n    const rpDefaults = {\n        json: true,\n        resolveWithFullResponse: true,\n        simple: false,\n        strictSSL: !process.env.VAULT_SKIP_VERIFY,\n    };\n\n    if (config.rpDefaults) {\n        Object.keys(config.rpDefaults).forEach((key) => {\n            rpDefaults[key] = config.rpDefaults[key];\n        });\n    }\n\n    const rp = (() => {\n        if (config['request-promise'])\n            return config['request-promise'].defaults(rpDefaults);\n\n        const baseAgentOptions = {};\n        if (rpDefaults.strictSSL === false) {\n            baseAgentOptions.rejectUnauthorized = false;\n        }\n\n        // Properties that map to https.Agent options for backward compatibility\n        // with the former postman-request / request library API.\n        const tlsOptionKeys = ['ca', 'cert', 'key', 'passphrase', 'pfx'];\n\n        // Build the default agent from base options + config.requestOptions TLS\n        // settings so the common case (no per-call overrides) reuses one agent.\n        const configReqOpts = config.requestOptions || {};\n        const defaultAgentOpts = { ...baseAgentOptions };\n        let hasDefaultTls = Object.keys(baseAgentOptions).length > 0;\n\n        tlsOptionKeys.forEach((prop) => {\n            if (configReqOpts[prop] !== undefined) {\n                defaultAgentOpts[prop] = configReqOpts[prop];\n                hasDefaultTls = true;\n            }\n        });\n        if (configReqOpts.agentOptions !== undefined) {\n            Object.assign(defaultAgentOpts, configReqOpts.agentOptions);\n            hasDefaultTls = true;\n        }\n        if (configReqOpts.strictSSL !== undefined) {\n            defaultAgentOpts.rejectUnauthorized = configReqOpts.strictSSL !== false;\n            hasDefaultTls = true;\n        }\n\n        const defaultHttpsAgent = hasDefaultTls\n            ? new https.Agent(defaultAgentOpts)\n            : undefined;\n\n        const instance = axios.create({\n            // Accept all HTTP status codes (equivalent to request's simple: false)\n            // so that vault response handling logic can process non-2xx responses.\n            validateStatus: () => true,\n            ...(defaultHttpsAgent ? { httpsAgent: defaultHttpsAgent } : {}),\n            ...(rpDefaults.timeout ? { timeout: rpDefaults.timeout } : {}),\n        });\n\n        // Snapshot config-level TLS references so we can detect per-call overrides.\n        const configTlsSnapshot = {};\n        tlsOptionKeys.forEach((prop) => {\n            if (configReqOpts[prop] !== undefined) configTlsSnapshot[prop] = configReqOpts[prop];\n        });\n        if (configReqOpts.agentOptions !== undefined) {\n            configTlsSnapshot.agentOptions = configReqOpts.agentOptions;\n        }\n        if (configReqOpts.strictSSL !== undefined) {\n            configTlsSnapshot.strictSSL = configReqOpts.strictSSL;\n        }\n\n        return function requestWrapper(options) {\n            const axiosOptions = {\n                method: options.method,\n                url: options.uri,\n                headers: { ...options.headers },\n            };\n\n            if (options.json && typeof options.json === 'object') {\n                axiosOptions.data = options.json;\n            }\n\n            // Forward axios-native options when provided directly.\n            if (options.timeout !== undefined) {\n                axiosOptions.timeout = options.timeout;\n            }\n            if (options.httpAgent !== undefined) {\n                axiosOptions.httpAgent = options.httpAgent;\n            }\n\n            // Only create a per-request httpsAgent when per-call TLS options\n            // differ from the config defaults already baked into the instance.\n            let hasOverride = false;\n            const perRequestAgentOpts = {};\n\n            tlsOptionKeys.forEach((prop) => {\n                if (options[prop] !== undefined) {\n                    perRequestAgentOpts[prop] = options[prop];\n                    if (options[prop] !== configTlsSnapshot[prop]) hasOverride = true;\n                }\n            });\n\n            if (options.agentOptions !== undefined) {\n                Object.assign(perRequestAgentOpts, options.agentOptions);\n                if (options.agentOptions !== configTlsSnapshot.agentOptions) hasOverride = true;\n            }\n\n            if (options.strictSSL !== undefined) {\n                perRequestAgentOpts.rejectUnauthorized = options.strictSSL !== false;\n                if (options.strictSSL !== configTlsSnapshot.strictSSL) hasOverride = true;\n            }\n\n            if (hasOverride) {\n                axiosOptions.httpsAgent = new https.Agent({\n                    ...defaultAgentOpts,\n                    ...perRequestAgentOpts,\n                });\n            } else if (options.httpsAgent !== undefined) {\n                // Allow passing a pre-built httpsAgent directly (e.g. for proxies).\n                axiosOptions.httpsAgent = options.httpsAgent;\n            }\n\n            return instance(axiosOptions).then((response) => {\n                let requestPath;\n                try {\n                    requestPath = new URL(options.uri).pathname;\n                } catch (_e) {\n                    requestPath = options.uri;\n                }\n                return {\n                    statusCode: response.status,\n                    body: response.data,\n                    request: {\n                        path: requestPath,\n                    },\n                };\n            });\n        };\n    })();\n    const client = {};\n\n    function handleVaultResponse(response) {\n        if (!response) return Promise.reject(new VaultError('No response passed'));\n        debug(response.statusCode);\n        if (response.statusCode !== 200 && response.statusCode !== 204) {\n            // handle health response not as error\n            if (response.request.path.match(/sys\\/health/) !== null) {\n                return Promise.resolve(response.body);\n            }\n            let message;\n            if (response.body && response.body.errors && response.body.errors.length > 0) {\n                message = response.body.errors[0];\n            } else {\n                message = `Status ${response.statusCode}`;\n            }\n            const error = new ApiResponseError(message, response);\n            return Promise.reject(error);\n        }\n        return Promise.resolve(response.body);\n    }\n\n    client.handleVaultResponse = handleVaultResponse;\n\n    // defaults\n    client.apiVersion = config.apiVersion || 'v1';\n    client.endpoint = config.endpoint || process.env.VAULT_ADDR || 'http://127.0.0.1:8200';\n    client.pathPrefix = config.pathPrefix || process.env.VAULT_PREFIX || '';\n    client.token = config.token || process.env.VAULT_TOKEN;\n    client.noCustomHTTPVerbs = config.noCustomHTTPVerbs || false;\n    client.namespace = config.namespace || process.env.VAULT_NAMESPACE;\n    client.kubernetesPath = config.kubernetesPath || 'kubernetes';\n\n    const requestSchema = {\n        type: 'object',\n        properties: {\n            path: {\n                type: 'string',\n            },\n            method: {\n                type: 'string',\n            },\n        },\n        required: ['path', 'method'],\n    };\n\n    // Handle any HTTP requests\n    client.request = (options = {}) => {\n        const valid = tv4.validate(options, requestSchema);\n        if (!valid) return Promise.reject(tv4.error);\n        let uri = `${client.endpoint}/${client.apiVersion}${client.pathPrefix}${options.path}`;\n        // Replace unicode encodings.\n        uri = uri.replace(/&#x2F;/g, '/');\n        options.headers = options.headers || {};\n        if (typeof client.token === 'string' && client.token.length) {\n            options.headers['X-Vault-Token'] = options.headers['X-Vault-Token'] || client.token;\n        }\n        if (typeof client.namespace === 'string' && client.namespace.length) {\n            options.headers['X-Vault-Namespace'] = client.namespace;\n        }\n        options.uri = uri;\n        debug(options.method, uri);\n        if (options.json) debug(options.json);\n        return rp(options).then(client.handleVaultResponse);\n    };\n\n    client.help = (path, requestOptions) => {\n        debug(`help for ${path}`);\n        const options = { ...config.requestOptions, ...requestOptions };\n        options.path = `/${path}?help=1`;\n        options.method = 'GET';\n        return client.request(options);\n    };\n\n    client.write = (path, data, requestOptions) => {\n        debug('write %o to %s', data, path);\n        const options = { ...config.requestOptions, ...requestOptions };\n        options.path = `/${path}`;\n        options.json = data;\n        options.method = 'POST';\n        return client.request(options);\n    };\n\n    client.update = (path, data, requestOptions) => {\n        debug('update %o to %s', data, path);\n        const options = { ...config.requestOptions, ...requestOptions };\n        options.path = `/${path}`;\n        options.json = data;\n        options.method = 'PATCH';\n        options.headers = { 'Content-Type': 'application/merge-patch+json' };\n        return client.request(options);\n    };\n\n    client.read = (path, requestOptions) => {\n        debug(`read ${path}`);\n        const options = { ...config.requestOptions, ...requestOptions };\n        options.path = `/${path}`;\n        options.method = 'GET';\n        return client.request(options);\n    };\n\n    client.list = (path, requestOptions) => {\n        debug(`list ${path}`);\n        const options = { ...config.requestOptions, ...requestOptions };\n        options.path = `/${path}`;\n\n        if (client.noCustomHTTPVerbs) {\n            options.path = `/${path}?list=1`;\n            options.method = 'GET';\n        } else {\n            options.path = `/${path}`;\n            options.method = 'LIST';\n        }\n        return client.request(options);\n    };\n\n    client.delete = (path, requestOptions) => {\n        debug(`delete ${path}`);\n        const options = { ...config.requestOptions, ...requestOptions };\n        options.path = `/${path}`;\n        options.method = 'DELETE';\n        return client.request(options);\n    };\n\n    function validate(json, schema) {\n        // ignore validation if no schema\n        if (schema === undefined) return Promise.resolve();\n        const valid = tv4.validate(json, schema);\n        if (!valid) {\n            debug(tv4.error.dataPath);\n            debug(tv4.error.message);\n            return Promise.reject(tv4.error);\n        }\n        return Promise.resolve();\n    }\n\n    function extendOptions(conf, options, args = {}) {\n        const hasArgs = Object.keys(args).length > 0;\n        if (!hasArgs) return Promise.resolve(options);\n\n        const querySchema = conf.schema.query;\n        if (querySchema) {\n            const params = [];\n            for (const key of Object.keys(querySchema.properties)) {\n                if (key in args) {\n                    params.push(`${key}=${encodeURIComponent(args[key])}`);\n                }\n            }\n            if (params.length > 0) {\n                options.path += `?${params.join('&')}`;\n            }\n        }\n\n        const reqSchema = conf.schema.req;\n        if (reqSchema) {\n            const json = {};\n            for (const key of Object.keys(reqSchema.properties)) {\n                if (key in args) {\n                    json[key] = args[key];\n                }\n            }\n            if (Object.keys(json).length > 0) {\n                options.json = json;\n            }\n        }\n\n        return Promise.resolve(options);\n    }\n\n    function generateFunction(name, conf) {\n        client[name] = (args = {}) => {\n            const options = { ...config.requestOptions, ...args.requestOptions };\n            options.method = conf.method;\n            // replace args in path.\n            options.path = mustache.render(conf.path, args);\n            // no schema object -> no validation\n            if (!conf.schema) {\n                if (options.method === 'POST' || options.method === 'PUT') {\n                    options.json = args;\n                }\n                return client.request(options);\n            }\n            // else do validation of request URL and body\n            let promise = validate(args, conf.schema.req)\n                .then(() => validate(args, conf.schema.query))\n                .then(() => extendOptions(conf, options, args))\n                .then((extendedOptions) => client.request(extendedOptions));\n\n            if (conf.tokenSource) {\n                promise = promise.then((response) => {\n                    const candidateToken = response.auth && response.auth.client_token;\n                    if (candidateToken) {\n                        client.token = candidateToken;\n                    }\n                    return response;\n                });\n            }\n\n            return promise;\n        };\n    }\n\n    client.generateFunction = generateFunction;\n    client.commands = commands;\n\n    // protecting global object properties from being added\n    // enforcing the immutable rule: https://github.com/airbnb/javascript#iterators-and-generators\n    // going the functional way first defining a wrapper function\n    const assignFunctions = (commandName) => generateFunction(commandName, commands[commandName]);\n    Object.keys(commands).forEach(assignFunctions);\n\n    return client;\n};\n"]}