UNPKG

middy-rds

Version:

Simple RDS manager for the middy framework

121 lines (116 loc) 4.1 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // clients/postgres.js var postgres_exports = {}; __export(postgres_exports, { default: () => postgres_default }); module.exports = __toCommonJS(postgres_exports); var import_util = require("@middy/util"); // lib/iam-token.js var import_rds_signer = require("@aws-sdk/rds-signer"); var iam_token_default = async (config) => { const params = { region: process.env.AWS_REGION ?? process.env.AWS_DEFAULT_REGION, hostname: config.host ?? config.hostname ?? process.env.DBHOST ?? process.env.PGHOST, port: Number.parseInt( config.port ?? process.env.DBPORT ?? process.env.PGPORT ), username: config.user ?? config.username ?? process.env.DBUSER ?? process.env.PGUSER }; const client = new import_rds_signer.Signer(params); return client.getAuthToken().then((token) => { if (!token.includes("X-Amz-Security-Token=")) { throw new Error("X-Amz-Security-Token Missing", { cause: { package: "middy-rds", data: params } }); } return token; }); }; // lib/ssl.js var import_node_fs = require("fs"); var import_node_tls = require("tls"); var ca = (0, import_node_fs.readFileSync)( process.env.NODE_EXTRA_CA_CERTS ?? "/var/runtime/ca-cert.pem", { encoding: "utf8" } ).toString(); var ssl_default = { rejectUnauthorized: true, ca, checkServerIdentity: (host, cert) => { const error = (0, import_node_tls.checkServerIdentity)(host, cert); if (error && !cert.subject.CN.endsWith(".rds.amazonaws.com")) { return error; } } }; // clients/postgres.js var defaults = { client: void 0, config: {}, forceConnection: false, internalData: void 0, contextKey: "rds", disablePrefetch: false, cacheKey: "rds", cacheExpiry: 15 * 60 * 1e3 - 1 }; var defaultConnection = { ssl: ssl_default }; var rdsMiddleware = (opts = {}) => { const options = { ...defaults, ...opts }; if (!options.client) throw new Error("client option missing"); const fetch = async (request) => { var _a, _b; const values = await (0, import_util.getInternal)(options.internalData, request); options.config = { ...defaultConnection, ...options.config, ...values }; (_a = options.config).port ?? (_a.port = Number.parseInt(process.env.PGPORT ?? 5432)); (_b = options.config).password ?? (_b.password = await iam_token_default(options.config)); const sql = options.client(options.config); options.config.password = void 0; if (options.forceConnection) { await sql`SELECT 1`; } return sql; }; let prefetch; if ((0, import_util.canPrefetch)(options)) { prefetch = (0, import_util.processCache)(options, fetch); } const rdsMiddlewareBefore = async (request) => { const { value } = prefetch ?? (0, import_util.processCache)(options, fetch, request); Object.assign(request.context, { [options.contextKey]: await value }); }; const rdsMiddlewareAfter = async (request) => { if (options.cacheExpiry === 0) { await request.context[options.contextKey].end(); } }; const rdsMiddlewareOnError = rdsMiddlewareAfter; return { before: rdsMiddlewareBefore, after: rdsMiddlewareAfter, onError: rdsMiddlewareOnError }; }; var postgres_default = rdsMiddleware; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = {});