middy-rds
Version:
Simple RDS manager for the middy framework
121 lines (116 loc) • 4.1 kB
JavaScript
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 = {});